我读了其他一些关于它的主题,但我仍然迷路了。
我想创建 2 种对象,一种只有“只读”属性的不可变对象,一种只有“读写”属性的可变对象。
让我们称它们为 EXCar 和 EXMutableCar。
EXCar 是 NSObject 的子类,EXMutableCar 是 EXCar 的子类。
ExCar 将在其界面中
@property (nonatomic, strong, readonly) NSString *name;
EXMutableCar 将在其界面中
@property (nonatomic, strong) NSString *name;
因此,当我使用它的子类 EXMutableCar 时,我“打开”了 EXCar 的属性。然后它是可变的。问题是在它们之间正确复制。
我在 EXCar 中实现了 mutableCopyWithZone :
- (id)mutableCopyWithZone:(NSZone *)zone {
EXMutableCar *mutableCopy = [[EXMutableCar allocWithZone:zone] init];
mutableCopy.name = _name;
return mutableCopy;
}
第一个问题,这是做这件事的好方法吗?(我要燕子副本)
问题在于copyWithZone。由于 EXCar 的属性是只读的,我既不能在 EXCar 中创建,也不能在 EXMutableCar 中创建 EXCar 的新实例并像这样填充其属性:
- (id)copyWithZone:(NSZone *)zone {
EXCar *copy = [[EXCar allocWithZone:zone] init];
copy.name = _name; // This can't work...
return copy;
}
而且我真的不想做一个带有 15 个属性的“init”方法来传递(当然,EXCar 就是一个例子,真正的类充满了许多属性)。通常它们是从服务器的 JSON 消息启动的,因此它们不需要复杂的 init 方法。
第二个问题是这样,如何做一个让我的班级不可变的 copyWithZone ?
谢谢你的帮助 :)