澄清:问题不在于可变与不可变,而是关于调用 super 创建正确类的实例。我没有想过[[self class] alloc]
在基类中使用,这似乎解决了我的问题。如果没有更好的结果,我会在接下来的几个小时内接受那个分析器:)
If a subclass inherits NSMutableCopying from its superclass and declares
additional instance variables, the subclass has to override mutableCopyWithZone:
to properly handle its own instance variables, invoking the superclass’s
implementation first.
这很令人困惑。考虑
@interface Base : NSObject<NSMutableCopying>
@property (nonatomic, assign) NSInteger value ;
@end
@implementation Base
...
@end
@interface Derived : Base<NSMutableCopying>
@property (nonatomic, assign) NSInteger value2 ;
@end
@implementation Derived
- (id) mutableCopyWithZone: (NSZone *) zone {
// Huh ???
Derived * derived = [super mutableCopyWithZone: zone] ;
...
// Huh ??????
derived.value2 = self.value2 ;
return derived ;
}
...
@end
如果我遵循规范,我只是不明白这段代码怎么可能是正确的。
当调用[super mutableCopyWithZone: zone]
返回时,我期望基类只为其自己的 ivars 分配了足够的空间。它无法判断Derived
实例需要更多空间来容纳自己的 ivars。
文档的真正含义是什么?我应该如何实现这个?