retain/copy/assign的含义
来源:互联网 发布:中国未来 知乎 编辑:程序博客网 时间:2024/05/22 12:54
举个例子可能更好理解点
NSString *pt = [[NSString alloc] initWithString:@"abc"];
上面一段代码会执行以下两个动作
1 在堆上分配一段内存用来存储@"abc" 比如:内存地址为:0X1111 内容为 "abc"
2 在栈上分配一段内存用来存储pt 比如:地址为:0Xaaaa 内容自然为0X1111
下面分别看下assign retain copy
assign的情况:NSString *newPt = [pt assing];
此时newPt和pt完全相同 地址都是0Xaaaa 内容为0X1111 即newPt只是pt的别名,对任何一个操作就等于对另一个操作。 因此retainCount不需要增加。
retain的情况:NSString *newPt = [pt retain];
此时newPt的地址不再为0Xaaaa,可能为0Xaabb 但是内容依然为0X1111。 因此newPt 和 pt 都可以管理"abc"所在的内存。因此 retainCount需要增加1
copy的情况:NSString *newPt = [pt copy];
此时会在堆上重新开辟一段内存存放@"abc" 比如0X1122 内容为@"abc 同时会在栈上为newPt分配空间 比如地址:0Xaacc 内容为0X1122 因此retainCount增加1供newPt来管理0X1122这段内存
NSString *pt = [[NSString alloc] initWithString:@"abc"];
上面一段代码会执行以下两个动作
1 在堆上分配一段内存用来存储@"abc" 比如:内存地址为:0X1111 内容为 "abc"
2 在栈上分配一段内存用来存储pt 比如:地址为:0Xaaaa 内容自然为0X1111
下面分别看下assign retain copy
assign的情况:NSString *newPt = [pt assing];
此时newPt和pt完全相同 地址都是0Xaaaa 内容为0X1111 即newPt只是pt的别名,对任何一个操作就等于对另一个操作。 因此retainCount不需要增加。
retain的情况:NSString *newPt = [pt retain];
此时newPt的地址不再为0Xaaaa,可能为0Xaabb 但是内容依然为0X1111。 因此newPt 和 pt 都可以管理"abc"所在的内存。因此 retainCount需要增加1
copy的情况:NSString *newPt = [pt copy];
此时会在堆上重新开辟一段内存存放@"abc" 比如0X1122 内容为@"abc 同时会在栈上为newPt分配空间 比如地址:0Xaacc 内容为0X1122 因此retainCount增加1供newPt来管理0X1122这段内存
- retain/copy/assign的含义
- retain/copy/assign的含义
- retain/copy/assign的含义
- iOS assign copy retain...含义
- iOS中assign、copy 、retain等关键字的含义
- iOS中assign、copy 、retain等关键字的含义
- iOS中assign、copy 、retain等关键字的含义
- iOS中assign、copy 、retain等关键字的含义
- property中属性retain,copy,assign的含义分别是什么
- iOS中assign、copy 、retain等关键字的含义
- iOS中assign、copy 、retain等关键字的含义
- iOS中assign、copy 、retain关键字的含义
- iOS中assign、copy 、retain等关键字的含义
- iOS中assign、copy 、retain等关键字的含义
- iOS中assign、copy 、retain 关键字的含义
- iOS中assign、copy 、retain等关键字的含义
- iOS中assign、copy 、retain等关键字的含义
- iOS中assign、copy 、retain等关键字的含义
- extern用于数组和指针
- LINQ to ADO.NET
- VIM个人配置
- 2-SAT——1.0(hdu3062,poj3678)
- 浅析Java学习从入门到精通
- retain/copy/assign的含义
- (转)AVL树的插入_删除操作
- Spring Bean 注入 Servlet 的方法
- STM32之时钟树笔记
- POJ 1016 Numbers That Count
- validate和causesvalidation的区别1
- GetDlgItem使用
- EJB基础--JBoss服务器
- ubuntu切换用户root时认证失败