OC Copy探究
1.copy的目的 生成一个独立的对象,不对原对象有影响
| 2. copy总结 | copy | mutablycopy |
| NSString | NSString 浅拷贝 | NSMutableString 深拷贝 |
| NSMutableString | NSString 深拷贝 | NSMutableString 深拷贝 |
| NSDictionary | NSDictionary 浅拷贝 | NSMutableDictionary 深拷贝 |
| NSMutableDictionary | NSDictionary 深拷贝 | NSMutableDictionary 深拷贝 |
| NSArray | NSArray 浅拷贝 | NSMutableArray 深拷贝 |
| NSMutableArray | NSArray 深拷贝 | NSMutableArray 深拷贝 |
3.copy属性关键字使用注意点
@interface SSPerson : NSObject
@property (copy, nonatomic) NSMutableArray *data; //会变成不可变对象 容易造成崩溃
@property (strong, nonatomic) NSArray *data;
@end
@implementation SSPerson
- (void)setData:(NSArray *)data {
if (_data != data) {
[_data release];
_data = [data copy];
}
}
- (void)dealloc {
self.data = nil;
[super dealloc];
}
@end
4. 自定义对象copy 需要实现copyWithZone方法,另外自定义的类 没有Mutable只说,Mutable只针对系统的类
@interface SSPerson : NSObject <NSCopying>
@property (assign, nonatomic) int age;
@property (assign, nonatomic) double weight;
@end
@implementation SSPerson
- (id)copyWithZone:(NSZone *)zone {
MJPerson *person = [[MJPerson allocWithZone:zone] init];
person.age = self.age;
person.weight = self.weight;
return person;
}
@end
浙公网安备 33010602011771号