assign,retain,copy区别深刻解析
来源:互联网 发布:知乎图标变样了 编辑:程序博客网 时间:2024/06/17 14:29
举个例子:
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和其子类对象好嘛 (大多数)
- assign,retain,copy区别深刻解析
- assign / retain / copy区别
- retain, copy, assign区别
- retain, copy, assign区别
- retain, copy, assign区别
- nonatomic retain copy assign区别
- retain\assign\copy的区别
- iOS retain, copy, assign区别
- nonatomic retain copy assign区别
- assign、retain、copy的区别
- retain copy assign 的区别
- retain和copy还有assign的区别
- retain和copy还有assign的区别
- @property中的retain,copy,assign区别
- nonatomic,assign,copy,retain的区别
- retain和copy还有assign的区别
- retain和copy还有assign的区别
- [iOS]retain\assign\copy的区别
- unity3d场景搭建常用操作
- share SDK
- Android String占位符功能
- Linux搭建SVN 服务器
- oracle中imp导入数据中文乱码问题
- assign,retain,copy区别深刻解析
- 基于VB中WINSOCK控件的网上象棋系统的实现
- BZOJ 3270 博物馆 期望DP+高斯消元
- iOS:KVO的概述与使用
- 接水问题
- mysql in 的两种用法
- codeforces 3C Tic-tac-toe (想法题)
- ios:KVC的概述与使用
- 2015年的3月是不一样的3月