@property后面的关键字

@property后面的有以下的属性readwrite,readonly,assign,retain,copy,nonatomic等
@property是一个属性访问声明,扩号内支持以下几个属性:
1.1> getter setter
getter=getterName,setter=setterName,设置setter与getter的方法名
1.2> weak assign strong copy
assign 用于非指针变量。用于基础数据类型 (例如NSInteger)和C数据类型(int, float, double, char, 等),另外还有id,其setter方法直接赋值,不进行任何retain操作
weak 用于指针变量,比assign多了一个功能,当对象消失后自动把指针变成nil,由于消息发送给空对象表示无操作,这样有效的避免了崩溃(野指针),为了解决原类型与循环引用问题
strong 用于指针变量,setter方法对参数进行release旧值再retain新值
copy 用于指针变量,setter方法进行copy操作,与retain处理流程一样,先旧值release,再copy出新的对象,retainCount为1。这是为了减少对上下文的依赖而引入的机制。copy是在你不希望a和b共享一块内存时会使用到。a和b各自有自己的内存。
1.3> readwrite,readonly,设置可供访问级别

1.4> nonatomic,非原子性访问,不加同步,多线程并发访问会提高性能。注意,如果不加此属性,则默认是两个访问方法都为原子型事务访问。所以约定俗成只在主线程更新UI,防止多线程设置UI属性,出现资源抢夺现象
**2> 如何避免循环引用 **
两个对象相互强引用,都无法release,解决办法为一个使用strong,一个使用assign(weak)
3> delegate的属性为什么使用assign/weak
避免出现循环引用,场景如UITableViewController强引用视图UITableView,而该视图的代理又是控制器,为避免循环引用,让delegate为弱引用

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

相关阅读更多精彩内容

  • assign: 简单赋值,不更改索引计数copy: 建立一个索引计数为1的对象,然后释放旧对象retain:释放旧...
    GoGooGooo阅读 10,088评论 0 15
  • 307、setValue:forKey和setObject:forKey的区别是什么? 答:1, setObjec...
    AlanGe阅读 5,526评论 0 1
  • 2017年11月24日 星期五 晴 柏欣怡妈妈 今天晴空万里,...
    柏欣怡妈妈阅读 1,252评论 0 0
  • 托儿所的姥姥们 外婆教大:姥姥,和姥姥们…… 托儿所,相当于现在幼儿园的小小班吧?也许入托算不上是入学,我上的托儿...
    JohnsonZH阅读 3,593评论 0 1
  • X:越发觉得我未来的人生充满不确定,一方面对未知充满希望,但“生存焦虑”仍然存在,人本能还是会喜欢确定的东西。两者...
    京津记阅读 3,550评论 0 0

友情链接更多精彩内容