6.属性

2017-05-05  本文已影响0人  写代码写到人生巅峰

1、在类接口中声明实例变量 意味着对象布局在编译器就已经固定。只要访问该实例,编译器就把它替换成“偏移量”,如果增加新的实例变量会导致偏移量出错,需重新编译。 声明为属性,偏移量会在运行时查找。

2、通过属性特质来指定存储数据所需的正确语义(分为4大类)

2.1.原子性
//  由于历史原因,atomic会造成iOS上性能问题,一律用nonatomic。在者atomic事实上也无法保证线程安全
@property(nonatomic, readonly, getter=isViewLoaded) BOOL viewLoaded

//  2.2.读写权限:readonly只读,readwrite读写(默认值)
@property(nonatomic, readonly, getter=isViewLoaded) BOOL viewLoaded

/**
 *  2.3.内存管理语义
 *  assgin: ”纯量类型“
 *  strong: "拥有关系",先保留新值,释放旧值,设置新值
 *  weak: "非拥有关系",属性所指的值遭到销毁,属性值也会清空
 *  unsafe_unretained: 语义和assign相同,当目标对象遭到摧毁时,属性值不会清空
 *  copy: strong类似。不保留新值,保留其拷贝。源对象不可变还是用strong吧。
 */

/**
 *  2.4.指定存取的方法名: 属性是Boolean型时常用
 */
@property(nonatomic, readonly, getter=isViewLoaded) BOOL viewLoaded

3.设置属性对应的实例变量时,一定要遵从属性所声明的语义。

上一篇下一篇

猜你喜欢

热点阅读