iOS开发中@ property的属性介绍

:默认是有该属性的,这个属性是为了保证程序在多线程情况,编译器会自动生成一些互斥加锁代码,避免该变量的读写不同步问题。

:如果该对象无需考虑多线程的情况,请加入这个属性,这样会让编译器少生成一些互斥加锁代码,可以提高效率。

:这个属性是默认的情况,会自动为你生成存取器。

:只生成getter不会有setter方法。

:强引用,也是我们通常说的引用,其存亡直接决定了所指向对象的存亡。如果不存在指向一个对象的引用,并且此对象不再显示在列表中,则此对象会被从内存中释放。

:弱引用,不决定对象的存亡。即使一个对象被持有无数个弱引用,只要没有强引用指向它,那么还是会被清除。


<李>

保留:释放旧的对象(释放),将旧对象的值赋给新对象,再令新对象引用计数为1。我理解为指针的拷贝,拷贝一份原来的指针,释放原来指针指向的对象的内容,再令指针指向新的对象内容。

<李>

复制:与保留处理流程一样,先对旧值,再复制出新的对象,retainCount为1。为了减少对上下文的依赖而引入的机制。我理解为内容的拷贝,向内存申请一块空间,把原来的对象内容赋给它,令其引用计数为1。对副本属性要特别注意:被定义有副本属性的对象必须要符合NSCopying协议,必须实现——(id) copyWithZone: (NSZone *)区方法。

<李>



也可以直接使用:

使用分配:对基础数据类型(使用NSInteger CGFloat)和C数据类型(整数、浮点数、双、字符等等)

使用复制:对NSString

使用保留:对其他NSObject和其子类

<李>



iOS开发中@ property的属性介绍