美文网首页
OC类属性了解一下-class作为属性修饰符

OC类属性了解一下-class作为属性修饰符

作者: CyanCricket | 来源:发表于2018-08-02 11:43 被阅读206次

类属性 (Objective-C Class Properties)

官方解释

先看下它在Xcode8 release版本中官方给出的解释:

Objective-C now supports class properties, which interoperate with Swift type properties. They are declared as: @property (class) NSString *someStringProperty;. They are never synthesized. (23891898)
简单来说就是Objective-C现在支持与Swift类型属性进行交互转换的类属性,这些属性永远不会synthesized,不会生成set和get方法。

就解释来看,似乎Objective-C获得这一功能是提高与Swift的互通性。 向Objective-C添加 class 属性映射到Swift中使用类变量。不过我们可以在OC中使用这个功能,更方便愉快的coding。

用法

我们新建一个TestCar类,同时有一个属性 desc
以便于在其他类访问我们在.h文件里面声明一个属性

@interface TestCar : NSObject

@property (nonatomic, copy, class) NSString *desc;

@end

当我们声明一个class属性的时候,编译器会发出警告!这也就是前面说的They are never synthesized.
这两个属性永远不会synthesized,因此如果我们不显式的添加setter和getter方法,XCode就会提示警告信息使用@dynamic或者是提供setter和getter方法; 注意在getter方法前面使用 + 让其成为一个类的方法

10.59.43.png

接下来我们简单实现一下set 和 get方法,以便在其他地方调用

static NSString * _desc = nil; //这里我们可以把它声明为静态变量 

@implementation TestCar

+ (NSString *)desc{
    if (!_desc) {
        _desc = [[NSString alloc] init];
    }
    return _desc;
}

+ (void)setDesc:(NSString *)desc{
    _desc = desc;
}
@end

接下来就可以调用了,可以使用类名上的普通点语法访问类属性

TestCar.desc = @"布加迪限量";
    
 NSLog(@"%@", TestCar.desc);

这里就可以正常输出内容了

10.51.53.png

同时也需要注意的是,由于这是Xcode 8中的LLVM编译器的一项功能,因此它可以在低于iOS 10的环境下使用。

总结一下

假如一个类里面都是类方法,或者想在其他地方访问一个类里面的信息,并且这个类里面还有一些属性的话,那么可以使用class修饰生成类属性,这样调用的时候可以直接使用类名调用,不用再生成一个该类的实例来调用了,使用类属性会更方便一点。
当然想使用这个功能你要付出的就是自己生成set和get方法。想必这不是什么难题!
属性用class修饰同时你也可以修饰为readonly只读,它并不会影响其他功能。

相关文章

  • OC类属性了解一下-class作为属性修饰符

    类属性 (Objective-C Class Properties) 官方解释 先看下它在Xcode8 rele...

  • #30天专注成长计划#-DAY5-c#

    1、类的语法 [访问修饰符] class 类名 { 类的成员; //字段、属性、方法 } 访问修饰符:publ...

  • iOS 中的window

    UIApplication.h 类中有 注:属性中的class修饰符: @property (class, n...

  • 类结构之cache分析

    背景 前面我们在分析ios类结构过程,在oc类结构那点事(四)中我们了解到class有几个关键属性,其中bits信...

  • iOS中属性与成员变量的区别

    一、类Class中的属性property 在第一版中,我们为输出口同时声明了属性和底层实例变量,那时,属性是oc语...

  • oop

    面向对象特点:封装、继承、多态 类声明一个类:[修饰符]class 类名{ [成员属性]//也叫成员变量 [成员方...

  • OC运行时

    我个人对OC的理解就是:动态获取OC Class的属性和方法,从而动态改变Class方法和属性。之前学习Java的...

  • 类和对象

    类=属性+方法 属性是信息,方法是动作 class 类的意思 如何定义类? class Students #定义...

  • typeScript学习笔记2 类

    “类的成员属性”都是实例属性,而不是原型属性,“类的成员方法”都是“原型”方法。 类的成员修饰符有:public,...

  • 2019-01-02

    学生类(特征:状态+行为):属性 public class student{ 类体=属性+方法 属性;存储数据采用...

网友评论

      本文标题:OC类属性了解一下-class作为属性修饰符

      本文链接:https://www.haomeiwen.com/subject/kzqjvftx.html