美文网首页
iOS开发属性特质

iOS开发属性特质

作者: 蛋哥是只猫 | 来源:发表于2017-11-09 11:32 被阅读0次

    原子性

    atomic (原子性)(系统默认): 使用同步锁。能够保证赋值和获取是线程安全的。但不能保证操作和访问是线程安全的。
    nonatomic (非原子性): 不适用同步锁。
    在 iOS 开发中一般使用 nonatomic ,因为在 iOS 中使用同步锁的开销较大,可能会带来性能问题,而且使用atomic不能保证线程安全。

    读写权限

    readwrite (读写)(系统默认):可读可写,属性拥有 gettersetter 方法,如果该属性由 @synthesize 实现,编译器会自动生成gettersetter 方法。
    readonly (只读):只能读取,不能写入,属性仅拥有 getter 方法。

    内存管理语义

    assign:“设置方法”,只会执行针对基本数据类型的赋值操作。

     1)assign修饰基本数据类型 
     2)修饰对象类型时不改变其引用计数  
     3)assign 修饰的对象在被释放之后,assign指针仍然指向原对象地址,会产生悬垂指针
    

    strong:表明属性定义了一种“拥有关系”,为这种属性设置新值时,设置方法会先保留新值,释放旧值,然后再将新值赋值上去。
    copy:表明属性定义了一种“拥有关系”,为这种属性设置新值时,设置方法不会保留新值,而是将新值拷贝一份。
    当属性类型为 NSStringNSArray, NSDictionary) 时,经常使用copy 的特性保护其封装性。因为传递给设置方法的新值可能是指向一个 NSMutableString 类的实例,它表示是一个可修改的字符串,如果不拷贝字符串,那么在属性设置完之后,字符串的值可能在对象不知情的情况下遭到修改。所以此时就要 copy 一份不可变的字符串,确保属性设置完新值后不会被无意间改动。

    copy
    1) 可变对象的copy和mutableCopy都是深拷贝
    2) 不可变对象的copy都是浅拷贝,mutableCopy是深拷贝
    3)mutableCopy返回的都是可变对象,copy返回都为不可变
    

    weak:表明属性定义了一种“非拥用有关系”,为这种属性设置新值时,设置方法既不保留新值,也不会释放旧值。在属性所指对象遭到销毁时,属性值会清空(即被赋值为nil)。

     1)不改变被修饰对象的引用计数
     2)所指对象在被释放之后会自动置为nil
    

    unsafe_inretained:(语义与 assign 相同,它适用于对象类型)表明属性定义了一种“非拥有关系”,只会执行对对象类型的赋值操作。当目标对象遭到摧毁时,属性值不会自动清空。

    方法名

    getter=<name>:指定获取方法的方法名。
    setter=<name>:指定设置方法的方法名。

    查阅资料《 Effective Objective-C 2.0 编写高质量 iOS 和 OS X 代码的52个有效方法》

    相关文章

      网友评论

          本文标题:iOS开发属性特质

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