iOS-实现对象拷贝【对象拷贝】

对象引用 NSCopying 代理

.h

@interface xk : NSObject <NSCopying,NSMutableCopying>

@property (nonatomic, copy) NSString *string1;
@property (nonatomic, copy) NSString *string2
@end

 

实现代理【拷贝】方法

.m

- (id)copyWithZone:(nullable NSZone *)zone {

xk *xk1= [[[self class] allocWithZone:zone] init];
xk1.string1 = [self.string1 copy];
xk1.string2 = [self.string2 copy];
return xk1;

}

 或

-(id)copyWithZone:(NSZone *)zone{
    xk *model = [[[self class] allocWithZone:zone] init];
    unsigned int count = 0;
    objc_property_t *properties = class_copyPropertyList([self class], &count);
    for (int i = 0; i<count; i++) {
        objc_property_t property = properties[i];
        const char *name = property_getName(property);
        NSString *propertyName = [NSString stringWithUTF8String:name];
        id value = [self valueForKey:propertyName];
        if (value) {
            [model setValue:value forKey:propertyName];
        }
    }
    free(properties);
    return model;
}

-(id)mutableCopyWithZone:(NSZone *)zone{
    xk *model = [[[self class] allocWithZone:zone] init];
    unsigned int count = 0;
    objc_property_t *properties = class_copyPropertyList([self class], &count);
    for (int i = 0; i<count; i++) {
        objc_property_t property = properties[i];
        const char *name = property_getName(property);
        NSString *propertyName = [NSString stringWithUTF8String:name];
        id value = [self valueForKey:propertyName];
        if (value) {
            [model setValue:value forKey:propertyName];
        }
    }
    free(properties);
    return model;
}

 

posted @ 2018-04-14 08:47  macroK  阅读(511)  评论(0编辑  收藏  举报