美文网首页iOS面试iOS面试
IOS 中属性property的常用关键字的使用

IOS 中属性property的常用关键字的使用

作者: 陈大人辛苦了 | 来源:发表于2016-03-18 15:26 被阅读1866次

现在开发中,基本是使用ARC(自动引用计数)技术,来编写我们的代码。因此在属性property中我们经常使用的关键字有strong,weak,assign,copy,nonatomic,atomic....等。可能大家都知道他的用法,但却不是很清楚他们的含义,下面我总结一下它们。

属性关键字含义

strong               释放旧对象将旧对象的值赋予输入对象,再提高输入对象的索引计数为1,此关键字经常使用。

weak                不增加引用计数,不持有对象,因此也不能决定对象释放  对比assign 的一个好处是,当对象消失时指针自动归为nil

assign              适用于基础数据类型(NSInteger CGFloat...)不增加引用计数

copy                建立一个索引计数为1 的对象然后释放旧对象 此属性只对那些实行了NSCopying协议的对象类型有效(NSString , Block)

atomic            和 nonatomic用来决定编译器生成的getter和setter是否为原子操作,atomic 设置成员变量的@property属性时  默认为是atomic 提供线程安全。

nonatomic      非原子性访问对于属性赋值的时候不加锁,多线程并发访问会提高性能,如果不加此属性则默认是两个访问方法都为原子型事务访问。

readonly          此标记说明属性是只读的

readwrite          此标记说明属性会被当成读写的  这也是默认的属性

unsafe_unretained          跟weak类似,声明一个弱引用,但是当引用计数为0时,变量不会自动设置为nil(ios5加入的 我基本没用过)


1.assign的情况: NSString  * myHouse  = [ houseOfMM  assign ];

此时 myHouse 和 houseOfMM 完全相同,地址都是 0XAAAA  ,内容为 0X1111  ,即 myHouse 只是 houseOfMM 的别名,对任何一个操作就等于对另一个操作。因此 retainCount 不需要增加.(同进同出,关系好,一把钥匙,给我拿着)

2.retain的情况: NSString  *  myHouse  = [ houseOfMM  retain ];

此时 myHouse 的地址不再为 0XAAAA ,可能为 0XAABB ,但是内容依然为 0X1111 .因此 myHouse 和 houseOfMM都可以管理' 装梵几的三室两厅 '所在的内存。因此  retainCount 需要增加1.(有些独立,各自进出,两把钥匙)

3.copy的情况: NSString  *  myHouse  = [ houseOfMM  copy ];

此时会在堆上重新开辟一段内存存放@'MM的三室两厅',比如0X1122,内容为@'MM的三室两厅',同时会在栈上为myHouse分配空间,比如地址:0XAACC,内容为0X1122,因此retainCount增加1供myHouse来管理0X1122这段内存.(两套@'装梵几的三室两厅',条件好,分居了,房子一人一套,所以钥匙一人一把。)

属性关键字对比

copy : strong      1.copy建立一个同样的对象 比如一个NSString 地址为0x1212 内容 @“121”  copy到另一个NSString上  地址改变 而内容不变 新对象retain +1 就对象不变  也就是说copy时内容拷贝  而 strong不是他只是单纯的生命一个变量 retain为1                                                                     2.strong的set方法时浅拷贝  copy的set为深拷贝                                                                   

assign : weak     在MRC环境下使用使用assign实现基本类型.           在ARC环境下,weak相当于assign   个人感觉weak比assign要强大的地方在 weak可以避免循环引用 , 同时当对象不存在时候可以将其置为nil

相关文章

网友评论

    本文标题:IOS 中属性property的常用关键字的使用

    本文链接:https://www.haomeiwen.com/subject/bmthlttx.html