手机网站建设请示,营销型网站的名词解释,我要下载百度,外贸网站建站oc对象的一些属性#xff1a; retain,strong, copy,weak,assign#xff0c;readonly, readwrite, unsafe_unretained下面来分别讲讲各自的作用和区别#xff1a;retain#xff0c;计数器加1#xff0c; (增加一个指向内存的指针) 对应release#xff08;计数器#xff0…oc对象的一些属性 retain,strong, copy,weak,assignreadonly, readwrite, unsafe_unretained 下面来分别讲讲各自的作用和区别 retain计数器加1 (增加一个指向内存的指针) 对应release计数器1 setter 方法对参数进行 release 旧值再 retain 新值所有实现都是这个顺序 复制代码 - (void)setBackView:(UIView *)backView { if (_backView ! backView) { [_backView release]; _backView [backView retain]; } return _backView; } 复制代码 copy, 拷贝新开地址内容拷贝 setter 方法进行 Copy 操作与 retain 处理流程一样先旧值 release 再 Copy 出新的对象 retainCount 为 1 。这是为了减少对上下文的依赖而引入的机制。 提一点深拷贝shallow copy浅拷贝deep copy 这篇文章比较直观http://blog.csdn.net/omegayy/article/details/7311839 官方文档https://developer.apple.com/library/mac/documentation/Cocoa/Conceptual/Collections/Articles/Copying.html copy和mutableCopy调用后表现的行为到底是什么样完成取决于类本身NSCopying和NSMutableCopying协议是如何实现的。 strong, 强引用计数器加1和retain一样(对应retain和copy) weak,弱引用 复制代码 strong 用来修饰强引用的属性 property (strong) SomeClass * aObject; 对应原来的 property (retain) SomeClass * aObject; 和 property (copy) SomeClass * aObject; weak 用来修饰弱引用的属性 property (weak) SomeClass * aObject; 对应原来的 property (assign) SomeClass * aObject; 复制代码 __weak, __strong 用来修饰变量此外还有 __unsafe_unretained, __autoreleasing 都是用来修饰变量的。 __strong 是缺省的关键词。 __weak 声明了一个可以自动 nil 化的弱引用。 __unsafe_unretained 声明一个弱应用但是不会自动nil化也就是说如果所指向的内存区域被释放了这个指针就是一个野指针了。 __autoreleasing 用来修饰一个函数的参数这个参数会在函数返回的时候被自动释放。 strong和weak的区别 weak和strong不同的是 当一个对象不再有strong类型的指针指向它的时候 它会被释放 即使还有weak型指针指向它。 一旦最后一个strong型指针离去 这个对象将被释放所有剩余的weak型指针都将被清除。 可能有个例子形容是妥当的。 想象我们的对象是一条狗狗想要跑掉被释放。 strong型指针就像是栓住的狗。只要你用牵绳挂住狗狗就不会跑掉。如果有5个人牵着一条狗5个strong型指针指向1个对象除非5个牵绳都脱落 否着狗是不会跑掉的。 weak型指针就像是一个小孩指着狗喊到“看一只狗在那” 只要狗一直被栓着小孩就能看到狗weak指针会一直指向它。只要狗的牵绳脱落狗就会跑掉不管有多少小孩在看着它。 只要最后一个strong型指针不再指向对象那么对象就会被释放同时所有的weak型指针都将会被清除。 assign,用于简单类型计数器不加直接赋值一个指针一块地址, setter 方法直接赋值不进行任何 retain 操作为了解决原类型与环循引用问题 readonly,只读只生成get方法没有set方法 readwrite,默认可读写set,get方法都会生成 unsafe_unretained类似weak,所谓的unSafe就是指会容易出现也指针的情况慎用 setter xxxx声明对象的set方法 getter xxxx, 声明对象的get方法 nonatomic非原子操作系统不添加代码运行速度相对快但数据操作在多线程情况下相对不安全 atomic,原子操作编译时会增加很多加锁解锁代码数据操作在多线程情况下相对安全 * 使用assign: 对基础数据类型 NSInteger和C数据类型int, float, double, char,等 * 使用copy 对NSString * 使用retain 对其他NSObject和其子类