iOS开发属性特质

2017-11-09  本文已影响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个有效方法》

上一篇 下一篇

猜你喜欢

热点阅读