ios开发基础学习笔记(十一)--@property的使用

前言

大家好,我是milo,今天这篇文章讲的是@property在MRC和ARC下的使用和对比。

@property的参数

(1)线程方面
  atomic(默认):几乎不用,低性能 ,仅能保证读写安全(通过互斥锁),并不能保证线程安全。
  nonatomic:高性能,一般使用这个。

(2)内存管理方面
  1.MRC
  1> assign (默认): 基本数据类型、枚举、结构体(非OC对象),当2个对象相互引用,一端用retain,一端用assign,多对象时,也只需保持一端assign
  2> copy : 只用于NSString\block
  3> retain : 除NSString\block以外的OC对象

  2.ARC
  1> assgin(默认) : 基本数据类型、枚举、结构体(非OC对象)
  2> copy : 只用于NSString\block
  3> strong : 除NSString\block以外的OC对象(相当于retain)
  4> weak : 用于UI控件和delegate。当2个对象相互引用,一端用strong,一端用weak,多对象时,也只需保持一端weak(weak是弱引用,没有引用时释放内存和指针)

  !!!内存管理需要注意的地方:内存管理的关键字是通过在setter/getter方法里生成相关代码来实现内存管理的。
如:
当我们使用retain的时候:

@property(nonatomic,retain) Dog *dog;

实际上,setter/getter方法就变成了如下:

- (void)setDog:(Dog *)dog
{
   if(_dog != dog){          //判断是否需要重新赋值
      [_dog release];        //释放旧引用,计数器-1
      _dog = [dog retain];   //重新赋值,计数器+1
   }
}

跟我们所学的自己写的retain的管理一模一样(包括使用atomic上锁也是在setter/getter里面加@synchronized)

在这里就不展开逐个验证了,就上个结论:
1.retain:先release旧值,再retain新值
2.assign:直接赋值,不考虑内存管理。
3.copy:先release旧值,再copy新值,copy的本质为复制该内存所存储的内容,重新创建一个对象赋给其相同的内容,很明显,在copy这个过程中也发生了一次retain,不过这是个全新的对象。

(3)是否生成setter方法
  readwrite(默认):同时生成setter和getter的声明和实现
  readonly:只读,只会生成getter的声明和实现

(4)Set和get方法的名称
  修改set和get方法的名称,主要用于布尔类型。因为返回布尔类型的方法名一般以is开头,修改名称一般用在布尔类型中的getter。

@propery(nonatomic,getter=isRich) BOOL rich;
BOOL b=p.isRich;// 调用

  如果要修改set方法,记得在方法后面加个 “ :” ,因为set是带参数的,如:

@propery(nonatomic,setter=setIsRich:) BOOL rich;
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

  • 1.ios高性能编程 (1).内层 最小的内层平均值和峰值(2).耗电量 高效的算法和数据结构(3).初始化时...
    欧辰_OSR阅读 30,085评论 8 265
  • Swift1> Swift和OC的区别1.1> Swift没有地址/指针的概念1.2> 泛型1.3> 类型严谨 对...
    cosWriter阅读 13,913评论 1 32
  • 方大炭素是一切的总龙头,这一轮就是石墨烯电极涨价带来的石墨烯,稀土,有色行情,掀起了周期股的狂潮。 以后一定要牢记...
    奸人不拔阅读 2,299评论 0 0
  • 忽然感觉这一天也许就发生在我身上了,感觉很害怕。现在我还只是想一想,那个时候又该怎么办呀。除了当医生,我好...
    鼎鼎_7966阅读 1,769评论 0 0
  • “一片树林里分出两条路,而我选择了人迹更少的一条,从此决定了我一生的道路……”顺着《为你读诗》创始人潘杰客浑厚而又...
    补拙莫如勤LV阅读 4,599评论 0 1

友情链接更多精彩内容