-
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 <NSCopying>
/** 包间配置 */
@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