iOS 浅谈:深.浅拷贝与copy.strong
来源:互联网 发布:2016年4月非农数据 编辑:程序博客网 时间:2024/05/29 14:57
http://help.3g.163.com/15/0908/11/B305R99R00964KAD.html
深.浅拷贝
copy mutableCopy NSString
copy mutableCopy NSMutableString
结论:
注意:其他对象NSArray、NSMutableArray 、NSDictionary、NSMutableDictionary一样适用
copy NSObject
崩溃:
看崩溃信息HSPerson应该先实现:
- (id)copyWithZone:(NSZone *)zone;测试:
#import "HSPerson.h"@interface HSPerson()@end@implementation HSPerson- (id)copyWithZone:(NSZone *)zone{ return @"汉斯哈哈哈";}@end HSPerson *p = [[HSPerson alloc] init];p.age = 20;p.height = 170.0;HSPerson *copyP = [p copy];NSLog(@"copyP: %@", copyP);可以看出copyWithZone重新分配新的内存空间,则:
- (id)copyWithZone:(NSZone *)zone{ HSPerson *person = [[HSPerson allocWithZone:zone] init]; return person;// 有些人可能下面alloc,重新初始化空间,但这方法已给你分配了zone,自己就无需再次alloc内存空间了// HSPerson *person = [[HSPerson alloc] init];} HSPerson *p = [[HSPerson alloc] init];p.age = 20;p.height = 170.0;HSPerson *copyP = [p copy];NSLog(@"p = %p copyP = %p", p, copyP);NSLog(@"age = %d height = %f", copyP.age, copyP.height);虽然copy了份新的对象,然而age,height值并未copy,那么:
- (id)copyWithZone:(NSZone *)zone{ HSPerson *person = [[HSPerson allocWithZone:zone] init]; person.age = self.age; person.height = self.height; // 这里self其实就要被copy的那个对象,很显然要自己赋值给新对象,所以这里可以控制copy的属性 return person;}这时你会想,有NSMutableCopying?没错,是有这货:
- (id)mutableCopyWithZone:(NSZone *)zone{ HSPerson *person = [[HSPerson allocWithZone:zone] init]; person.age = self.age; person.height = self.height; return person;}NSCopying、NSMutableCopying有啥区别?
其实感觉没必要有NSMutableCopying,因为压根就没可变的HSPerson,但如果该对象有其他行为,可以借用NSMutableCopying实现,哈哈哈
copy.strong
说完深浅拷贝,理解copy.strong就轻松多了!
copy
property copy 实际上就对name干了这个:
- (void)setName:(NSString *)name{ _name = [name copy];}假设name为NSMutableString,会发生什么事?
@property (nonatomic, copy) NSMutableString *name;这样会挨骂哦,实际上内部还是:
- (void)setName:(NSMutableString *)name{ _name = [name copy];}copy出来的仍然是不可变字符!如果有人用NSMutableString的方法,就会崩溃:
strong
总结:用copy与strong取决于需求,如果不希望被外界更改用copy,反之用strong
0 0
- iOS 浅谈:深.浅拷贝与copy.strong
- iOS 浅谈:深.浅拷贝与copy.strong
- iOS 浅谈:深.浅拷贝与copy.strong
- iOS 浅谈:深.浅拷贝与copy.strong
- iOS 浅谈:深.浅拷贝与copy.strong
- iOS 浅谈:深.浅拷贝与copy.strong
- 深拷贝,浅拷贝与copy,strong
- iOS内存管理--深、浅拷贝与copy、strong
- [概念]深.浅拷贝与 copy 、strong
- 深拷贝和浅拷贝:strong与 copy 区别
- iOS内存管理(5)--深、浅拷贝与copy、strong
- iOS 浅拷贝(Shallow Copy)与深拷贝(Deep Copy)
- IOS 之copy(浅拷贝)和mutableCopy(深拷贝) 以及strong 和weak理解
- ios-关于深拷贝和浅拷贝和属性中的copy和strong的区别
- OC的深拷贝与浅拷贝--NSArray与NSMutableArray应该使用copy还是strong?
- 深拷贝与浅拷贝(mutableCopy与Copy)详解 iOS
- iOS strong、copy关键字之深浅拷贝
- NSString为什么要用copy关键字,如果用strong会有什么问题 OC中的深拷贝与浅拷贝
- 04_XML 树结构
- springmvc之log4j
- CUDA之——并行计算(向量和)
- 05_XML 语法规则
- Java - PAT - 1021. 个位数统计 (15)
- iOS 浅谈:深.浅拷贝与copy.strong
- 06_XML 元素
- 蘑菇街未来的发展方向
- Java入门第二季-练习:租车系统
- 07_XML 属性
- 第一篇博客
- python ConfigParser操作配置文件
- 08_XML 验证
- ACM第三次练习—1014