博客> 17.copy
17.copy
2017-08-16 16:10 评论:0 阅读:176 Longer_Tao
oc NSCopy

1.实现拷贝的方法

  • copy
    • 只会产生不可变的副本对象(比如NSString)
  • mutableCopy
    • 只会产生可变的副本对象(比如NSMutableString)

 Snip20160511_1.png

2.自定义对象(深拷贝)

1.遵守copy协议 2.实现方法:copyWithZone 3.在copyWithZone中获取对象,设置需要拷贝的属性

// 1.遵守copy协议
@interface XMGPerson() <NSCopying>

@end

@implementation XMGPerson

// 2.实现方法:copyWithZone
- (id)copyWithZone:(NSZone *)zone
{
    // 3.通过zone获取对象
    XMGPerson *person = [[XMGPerson allocWithZone:zone] init];

    // 4.设置需要copy的属性
    person.age = self.age;
    person.money = self.money;

    return person;
}

@end

// 使用copy
    XMGPerson *p = [[XMGPerson alloc] init];
    p.age = 10;
    p.money = 100.6;

    XMGPerson *p2 = [p copy]; // 系统会调用[p copyWithZone:zone]
    NSLog(@"%d %f", p2.age, p2.money); // 10 100.6

3.property属性定义中 copy和strong的区别

@property (nonatomic, strong) NSMutableString *name1;
@property (nonatomic, copy) NSMutableString *name;

区别:setter方法的实现不同

// strong时:_name和name是同一个对象
- (void)setName:(NSString *)name
{
    _name = name;
}

// copy时:得到的是一个新对象,不能通过修改name来改变_name
- (void)setName:(NSString *)name
{
    _name = [name copy];
}

4.property属性定义中 使用NSMutable。。。不用copy


/** name属性值永远是不可变,所以定义为NSMutableString是不合理的 */
@property (nonatomic, copy) NSMutableString *name;```
收藏
0
sina weixin mail 回到顶部