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

举个例子:

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

上面一段代码会执行以下两个动作:   
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子类的类,如NSArrayNSSetNSDictionaryNSData的,NSCharacterSetNSIndexSetNSString
(可深度拷贝的房子)
但是NSMutableArray这样的不可以,Mutable的不能用copy,不然初始化会有问题。切记

什么时候用retain
其他NSObject和其子类对象好嘛 (大多数)


ARC中的strong相当于非ARC中的retain,ARC来了以后多搞一把钥匙就strong了啦。 

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


  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值