iOS开发知识点装逼1:理解assign,copy,retain变strong


举个例子:
html

    NSString *houseOfMM = [[NSString allocinitWithString:'装梵几的三室两厅'];  ios

上面一段代码会执行如下两个动做: 
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这段内存.(两套@'装梵几的三室两厅',条件好,分居了,房子一人一套,因此钥匙一人一把。) app



何时用assign,固然是破房子,简装的房子拉
基础类型(简单类型,原子类型):NSInteger,CGPoint,CGFloat,C数据类型(int,float,double,char等)


何时用copy
含有可深拷贝的mutable子类的类,如NSArrayNSSetNSDictionaryNSData的,NSCharacterSetNSIndexSetNSString
(可深度拷贝的房子)
可是NSMutableArray这样的不能够,Mutable的不能用copy,否则初始化会有问题。切记

何时用retain
其余NSObject和其子类对象好嘛 (大多数)


ARC中的strong至关于非ARC中的retain,ARC来了之后多搞一把钥匙就strong了啦。 spa

抄袭:http://wenku.baidu.com/view/ab6ed804bed5b9f3f90f1c7d.html .net


有空的话翻译一下好嘛: 翻译


http://clang.llvm.org/docs/AutomaticReferenceCounting.html orm


https://developer.apple.com/library/mac/#documentation/Cocoa/Conceptual/ObjectiveC/Chapters/ocProperties.html htm


http://developer.apple.com/library/ios/#releasenotes/ObjectiveC/RN-TransitioningToARC/Introduction/Introduction.html 对象


先看这个 : blog

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/

相关文章
相关标签/搜索