博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
OC变量限定符和属性限定符
阅读量:5088 次
发布时间:2019-06-13

本文共 1469 字,大约阅读时间需要 4 分钟。

ARC当中变量的四种生命周期限定符

__strong

__weak

__unsafe_unretained

__autoreleaseing

 

  • __strong  是默认的限定符,无需显示引入,只要有强引用指向,对象就会长时间驻留在内存中。可以将__strong理解为reatain调用的ARC版本。
  • __weak  这表明引用不会保持被引用对象的存活。当没有强引用指向对象时,弱引用会被置为nil。可将__weak看作是assign操作符的ARC版本,只是对象被回收时,__weak具有安全性--指针将会被自动设置为nil。但是assign一般用来修饰基本数据类型,基本数据类型存储在由操作系统管理栈中,所以不用担心他什么时候置nil。
  • __unsafe_unretained  与weak类似,只是当没有强引用指向对象时,__unsafe_unretained不会被置为nil。可以将它看作assin的ARC版本。
  • __autoreleaseing 用于有引用使用 id *传递的消息参数。它预期了autorelease方法会在传递参数的方法中被调用。

  

  

Person * __strong p1 = [[Person alloc] init]; //创建对象之后引用计数器 为1,并且对象在p1被引用期不会被释放。

Person * __weak p2 = [[Person alloc] init]; //创建对象之后引用计数器 为0,对象会被立即释放,且p2将被设置为nil
Person * __unsafe_unretained p3 = [[Person alloc] init];//创建对象之后引用计数器 为0,对象会被立即释放,且p2不会被设置为nil

Person * __autoreleasing p4 = [[Person alloc] init]; //创建对象之后引用计数器 为1,当方法返回时对象会被立即释放

 

属性限定符

strong

  默认,指定了__strong关系, 能保证 对象在其作用于内不会被销毁。

weak

  指定了__weak关系,如果在一个{}作用于定义了一个__weak修饰的对象,由于引用计数器没有+1,创建好就是0,所以创建好了里么就会被销毁置nil。

assign

  ARC当中表示 __unsafe_unreataied关系

copy

  暗指了 __strong关系,它还暗指了 setter中的复制语义。

retain

  指定了__strong关系。ARC中基本不用。

unsafe_unretained

  指定了__unsafe_unretained关系。

注意:

  assign 和 unsage_unretained 只进行值复制而没有任何实质性的检查,所以他们应该用于值类型(BOOL, NSInter, NSUInteger),应该避免将他们用于引用类型,尤其是指针类型,如NSString *, UIView *。

unsage_unretained修饰的对象创建之后会被立即释放,但是内存可能还没有被回收,这个引用可以使用,且不会导致错误。但是再次调用创建这个unsage_unretained修饰的对象的函数时就会出现SIGABRT崩溃。原因,第二次创建调用函数时,对象已经析构,而且内存也被重新分配和使用了,于是导致了非法访问。

 

转载于:https://www.cnblogs.com/wjw-blog/p/9186257.html

你可能感兴趣的文章
大数据学习系列(8)-- WordCount+Block+Split+Shuffle+Map+Reduce技术详解
查看>>
Mysql性能调优
查看>>
ES6内置方法find 和 filter的区别在哪
查看>>
硬件笔记之Thinkpad T470P更换2K屏幕
查看>>
getElement的几中属性介绍
查看>>
设计器 和后台代码的转换 快捷键
查看>>
STL容器之vector
查看>>
数据中心虚拟化技术
查看>>
复习文件操作
查看>>
SQL Server 使用作业设置定时任务之一(转载)
查看>>
第二阶段冲刺-01
查看>>
BZOJ1045 HAOI2008 糖果传递
查看>>
JavaScript 克隆数组
查看>>
eggs
查看>>
python3 生成器与迭代器
查看>>
java编写提升性能的代码
查看>>
《Genesis-3D开源游戏引擎完整实例教程-跑酷游戏篇03:暂停游戏》
查看>>
CPU,寄存器,一缓二缓.... RAM ROM 外部存储器等简介
查看>>
git .gitignore 文件不起作用
查看>>
Alan Turing的纪录片观后感
查看>>