理解assign,copy,retain变strong
2014-01-26 21:36
447 查看
来源:http://my.oschina.net/openlab/blog/89354
举个例子:
NSString *houseOfMM = [[NSString alloc] initWithString:'装梵几的三室两厅'];
上面一段代码会执行以下两个动作:
1 在堆上分配一段内存用来存储@' 装梵几的三室两厅 '
,比如:内存地址为 0X1111 内容为
' 装梵几的三室两厅' ,
2 在栈上分配一段内存用来存储 houseForWife ,比如:地址为 0XAAAA 内容自然为 0X1111
下面分别看下(assign,retain,copy):
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 ];
此时会在堆上重新开辟一段内存存放@'装梵几的三室两厅',比如0X1122,内容为@'装梵几的三室两厅',同时会在栈上为myHouse分配空间,比如地址:0XAACC,内容为0X1122,因此retainCount增加1供myHouse来管理0X1122这段内存.(两把钥匙,两个房间)
什么时候用assign,当然是破房子,简装的房子拉
基础类型(简单类型,原子类型):NSInteger,CGPoint,CGFloat,C数据类型(int,float,double,char等)
什么时候用copy
含有可深拷贝的mutable子类的类,如NSArray,NSSet,NSDictionary,NSData的,NSCharacterSet,NSIndexSet,NSString
(可深度拷贝的房子)
但是NSMutableArray这样的不可以,Mutable的不能用copy,不然初始化会有问题。切记
什么时候用retain
其他NSObject和其子类对象好嘛 (大多数)
ARC中的strong相当于非ARC中的retain,ARC来了以后多搞一把钥匙就strong了啦。
抄袭:http://wenku.baidu.com/view/ab6ed804bed5b9f3f90f1c7d.html
有空的话翻译一下好嘛:
http://clang.llvm.org/docs/AutomaticReferenceCounting.html https://developer.apple.com/library/mac/#documentation/Cocoa/Conceptual/ObjectiveC/Chapters/ocProperties.html http://developer.apple.com/library/ios/#releasenotes/ObjectiveC/RN-TransitioningToARC/Introduction/Introduction.html
先看这个 :
http://blog.csdn.net/favormm/article/details/7023322 http://www.crifan.com/object_c_property_setter_assign_retain_copy_weak_strong/ http://www.crifan.com/object_c_property_setter_assign_retain_copy_weak_strong/
举个例子:
NSString *houseOfMM = [[NSString alloc] initWithString:'装梵几的三室两厅'];
上面一段代码会执行以下两个动作:
1 在堆上分配一段内存用来存储@' 装梵几的三室两厅 '
,比如:内存地址为 0X1111 内容为
' 装梵几的三室两厅' ,
2 在栈上分配一段内存用来存储 houseForWife ,比如:地址为 0XAAAA 内容自然为 0X1111
下面分别看下(assign,retain,copy):
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 ];
此时会在堆上重新开辟一段内存存放@'装梵几的三室两厅',比如0X1122,内容为@'装梵几的三室两厅',同时会在栈上为myHouse分配空间,比如地址:0XAACC,内容为0X1122,因此retainCount增加1供myHouse来管理0X1122这段内存.(两把钥匙,两个房间)
什么时候用assign,当然是破房子,简装的房子拉
基础类型(简单类型,原子类型):NSInteger,CGPoint,CGFloat,C数据类型(int,float,double,char等)
什么时候用copy
含有可深拷贝的mutable子类的类,如NSArray,NSSet,NSDictionary,NSData的,NSCharacterSet,NSIndexSet,NSString
(可深度拷贝的房子)
但是NSMutableArray这样的不可以,Mutable的不能用copy,不然初始化会有问题。切记
什么时候用retain
其他NSObject和其子类对象好嘛 (大多数)
ARC中的strong相当于非ARC中的retain,ARC来了以后多搞一把钥匙就strong了啦。
抄袭:http://wenku.baidu.com/view/ab6ed804bed5b9f3f90f1c7d.html
有空的话翻译一下好嘛:
http://clang.llvm.org/docs/AutomaticReferenceCounting.html https://developer.apple.com/library/mac/#documentation/Cocoa/Conceptual/ObjectiveC/Chapters/ocProperties.html http://developer.apple.com/library/ios/#releasenotes/ObjectiveC/RN-TransitioningToARC/Introduction/Introduction.html
先看这个 :
http://blog.csdn.net/favormm/article/details/7023322 http://www.crifan.com/object_c_property_setter_assign_retain_copy_weak_strong/ http://www.crifan.com/object_c_property_setter_assign_retain_copy_weak_strong/
相关文章推荐
- 理解assign,copy,retain变strong
- 个人理解的IOS开发Objective-C中的属性readwrite,readonly,retain,assign,copy,nonatomic,strong,weak.
- iOS基础篇理解assign,copy,retain变strong
- 理解assign,copy,retain变strong
- 对于atomic nonatomic assign retain copy strong weak的简单理解
- iOS开发知识点装逼1:理解assign,copy,retain变strong
- iOS开发知识点:理解assign,copy,retain变strong
- iOS开发知识点装逼1:理解assign,copy,retain变strong
- 【ios】理解assign,copy,retain变strong
- iOS中assign,copy,retain之间的区别以及weak和strong的区别
- assign weak retain strong copy关键字的区别
- OC @property 指示符assign、atomic、copy、retain、strong、week、等
- 什么情况下我们使用copy,assign,retain,strong,weak?
- assign,copy,retain和weak,strong(借鉴别人并整理的)
- iOS中assign,copy,retain之间的区别以及weak和strong的区别(面试)
- assign weak retain strong copy关键字的区别
- copy,assign,strong,retain,weak,readonly,nonatomic的区别
- Objective-C学习——copy, retain,assign,readonly,readwrite,strong,weak,nonatomic,unsafe_unretained
- copy, retain, assign , readonly , readwrite,strong,weak,nonatomic整理
- iOS中copy,strong,retain,weak和assign的区别