美文网首页iOS 学习iOS面试题
iOS 属性和成员变量(Category)

iOS 属性和成员变量(Category)

作者: 后浪普拉斯 | 来源:发表于2018-04-09 17:50 被阅读1次

    属性和成员变量

    成员变量:在类接口部分或类实现部分定义的变量,所有的成员变量起始都是实例变量,并不是真正的类变量,成员变量(实例变量)从该累的实例被创建开始存在,直到系统完全销毁这个实例,可以将称为实例成员变量。

    @property (nonatomic, strong)UIView  *myView;
    

    属性:我们声明了一个属性,苹果在将编译器从GCC转成LLVM之后,就不需要我们为属性声明实例变量。编译器没有匹配实例变量的属性,将生成 _myView 的实例变量,不需要手动创建也不需要通过@synthesize myView给变量生成setter和getter方法。而@syntheSize就是让编译器生成setter和getter方法。

    Category中的property

    Category 只能添加方法,不能添加实例变量。但是我们会看到在Category 中添加属性,这种情况下是不会自动生成实力变量。
    在Category中添加属性,不会自动生成实例变量,这里面添加其实是setter和getter方法的声明,没有方法的实现。
    匿名类别extension(匿名扩展)是可以添加实例变量的,非匿名类别是不能添加实例变量的,只能添加方法,或者属性(其实也是方法),常用的扩展是在.m文件中声明私有属性和方法。 Category理论上不能添加变量,但是可以使用rRuntime机制来弥补这种不足。
    如果真的需要给category增加属性只能通过:
    ①objc_setAssociatedObject
    ②objc_getAssociatedObject

    相关文章

      网友评论

        本文标题:iOS 属性和成员变量(Category)

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