6.属性

作者: 写代码写到人生巅峰 | 来源:发表于2017-05-05 13:32 被阅读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.设置属性对应的实例变量时,一定要遵从属性所声明的语义。

    相关文章

      网友评论

          本文标题:6.属性

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