实现拷贝的方法

  • copy

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

    • 只会产生可变的副本对象(比如NSMutableString)
  • ios 中并不是所有的对象都支持copy,mutableCopy,遵守NSCopying协议的类可以发送copy消息,遵守NSMutableCopying协议的类才可以发送mutableCopy消息。

  • Foundation框架支持复制的对象有NSString、NSArray、NSNumber、NSDictionary、NSMutableString、NSMutableArray、NSMutableDictionary等。

  • 假如发送了一个没有遵守上诉两协议而发送copy或者 mutableCopy,那么就会发生异常。但是默认的ios类并没有遵守这两个协议。

  • 如果想自定义一下copy 那么就必须遵守NSCopying,并且实现 copyWithZone: 方法,如果想自定义一下mutableCopy 那么就必须遵守NSMutableCopying,并且实现 mutableCopyWithZone: 方法

@interface DBConfiguration : NSObject 
/** 包间配置 */
@property (nonatomic, strong) NSArray *roomConfigure;
/** 宴会类型 */
@property (nonatomic, strong) NSArray *banquetCategory;
/** 包间人数 */
@property (nonatomic, assign) NSInteger peopleNum;
/** 店铺配置 */
@property (nonatomic, strong) NSArray *shopConfigure;
@end

@implementation DBConfiguration
- (id)copyWithZone:(NSZone *)zone
{
    DBConfiguration *copy = [[DBConfiguration allocWithZone:zone] init];
    copy.roomConfigure = [self.roomConfigure copy];
    copy.banquetCategory = [self.banquetCategory copy];
    copy.peopleNum = self.peopleNum;
    copy.shopConfigure = [self.shopConfigure copy];
    return copy;
}
@end

你可能感兴趣的:(实现拷贝的方法)