博客> 浅谈OC(三)
浅谈OC(三)
2018-12-12 23:34 评论:0 阅读:440 碧波湾
属性 属性的属性 读写性控制 原子性控制 语义控制
                                                           ** 属性,属性的属性**
一.属性
    属性是在 Object -2.0 之后出来的语法, 为树立变量提供默认的 setter 方法和 getter方法.
    能在一定程度上简化程序代码, 并且增强实例变量访问的安全度
    1.用@ property 声明属性.
    2.代码规范:属性名前不加'-', 也不需要写在'{}'内.
    3.相当于声明了 setter 和 getter 方法.
    如:@ property NSString *name;

    而@synthesize name = _name;
    实现声明的属性相当于实现 setter 和 getter 方法.
    _name 代表生成指定的 setter 和 getter 方法内部操作的实例变量.

综上:在 Xcode4.5版本之前: 1.@property 是声明 setter 和 getter 方法. 2.@synthesize 的作用是系统自动生成指定实例变量的实例方法和实现 setter 和 getter 方法. 3.在 Xcode4.5之后, @property 的作用是系统自动生成指定的实例变量, 声明和实现 setter 和 getter 方法. 4.@ synthesize 的作用是系统生成指定的和实现 setter 和 getter 方法.
5.在实例变量没有明确声明的情况下,省略@ synthesize 时,我们不能同时重写 setter 和 getter 方法,只能重写 一个.无论是哪种情况下,系统自动升成的实例变量是私有的,子类可以继承但不可以访问. 二.属性的属性 属性的属性是用来控制 setter 和 getter 的实现细节. 属性的属性有三类:读写性 控制,原子性控制,语义控制 1.第一类属性: 读写性控制 readonly:只声明和实现 getter 方法. readwrite: 即声明和实现 setter 方法,又声明和实现 getter 方法,默认是 readwrite 一般使用默认值,所以经常省略不写. 2.第二类属性:原子性控制 atomic: 原子性,保证多线程访问下的安全性. nonatomic: 非原子性,不能保证多线程访问下的安全性. 默认是 atomic, 但通常设置为 nonatomic 3.第三类属性:语义控制 assign: 用于非对象类型, NSInteger, CGFloat, int等. retain: 用于对象类型, NSObject, NSString 等, setter 和 getter 方法的内部会做内存的优化. copy: 用于对象类型,当你需要这个属性有一个副本时,可以用 copy,当 copy 时 setter 和 getter 方法的 内部会做内存的优化.

收藏
1
sina weixin mail 回到顶部