Objective-C中copy属性的概述
来源:互联网 发布:java郝斌和毕向东 编辑:程序博客网 时间:2024/06/05 08:41
规范上NSString做属性都是写成copy的,理论上应该是复制了字符串而不是单纯的增加引用计数,其实问题只会出现在把NSMutableString赋值给NSString的时候。
- @interface Demo : NSObject
- {
- NSString *retainString;
- NSString *copyString;
- }
- @property (nonatomic, retain)NSString *retainString;
- @property (nonatomic, copy)NSString *copyString;
- @end
- @implementation Demo
- @synthesize retainString;
- @synthesize copyString;
- -(void)dealloc
- {
- [retainString release];
- [copyString release];
- [super dealloc];
- }
- @end
- Demo *o = [[Demo alloc] init];
- NSMutableString *s1 = [[NSMutableString alloc] initWithCapacity:100];
- [s1 setString:@"fuckyou"];
- o.retainString = s1;
- o.copyString = s1;
- NSLog(@"retain string is %@", o.retainString);
- NSLog(@"copy string is %@", o.copyString);
- [s1 setString:@"fuckme"];
- NSLog(@"retain string is %@", o.retainString);
- NSLog(@"copy string is %@", o.copyString);
这样就可以看出,当使用retain方式的时候,NSMutableString的内容变化时,语义上应该不可变的NSString也变化了,而用copy则是始终保持赋值时的内容。
如果对实际类型就是NSString的对象用了copy,那其实就是retain,你可以通过观察引用计数来发现,而且就语义上来说也完全没有问题,同时也避免了不需要的字符串拷贝的消耗.
0 0
- Objective-C中copy属性的概述
- Objective-c中属性的assign, retain, copy的用法
- Objective-C中类属性的 copy,…
- objective-c中property 的属性strong,weak, retain, copy
- Objective-C中类属性的 copy, tetain, assign , readonly , readwrite, nonatomic区别
- Objective-C中类属性的 copy, tetain, assign , readonly , readwrite, nonatomic区别
- Objective-C中类属性的 copy, tetain, assign , readonly , readwrite, nonatomic区别
- Objective-C中类属性的 copy, retain, assign , readonly , readwrite, nonatomic区别
- Objective-C 2.0属性(Property) retain和copy的区别
- Objective-C属性修饰符strong和copy的区别
- Objective-C属性修饰符strong和copy的区别
- Objective-C属性修饰符strong和copy的区别
- Objective-C属性修饰符strong和copy的区别
- Objective-C 2.0属性(Property) retain,copy,assign,copy
- objective-c中nonatomic,assign,copy,retain的区别
- objective-c中property的属性
- Objective-C中属性修饰符copy,retain,assign,readonly,readwrite,nonatomic
- Objective-C 编程语言(5)属性----概述
- C++ 学习点
- 文章标题
- eclipse 报错 主类加载错误 或找不到主类
- Android APP 应用开发设计 工作 跳槽 定位 未来 程序员和收入
- 时间格式转换
- Objective-C中copy属性的概述
- android studio 删除工程&模块
- 【比较】构件图和部署图
- Android进阶:获取屏幕参数
- 遥感影像处理
- 软件测试与软件质量-什么是软件测试
- cocoaPods的安装
- oracle创建用户及赋权
- Java中的逆变与协变