删除@synthesize
这些属性。他们提供了获取/设置。
编辑:为了清楚起见。在 .h 中,他们声明了可接受的StatusCodes
NSIndexSet * _acceptableStatusCodes;
和
@property (copy, readwrite) NSIndexSet * acceptableStatusCodes;
然后,在 .m 中,他们有
@synthesize acceptableStatusCodes = _acceptableStatusCodes;
和
- (NSIndexSet *)acceptableStatusCodes
{
return [[self->_acceptableStatusCodes retain] autorelease];
}
- (void)setAcceptableStatusCodes:(NSIndexSet *)newValue
{
if (self.state != kQRunLoopOperationStateInited) {
assert(NO);
} else {
if (newValue != self->_acceptableStatusCodes) {
[self willChangeValueForKey:@"acceptableStatusCodes"];
[self->_acceptableStatusCodes autorelease];
self->_acceptableStatusCodes = [newValue copy];
[self didChangeValueForKey:@"acceptableStatusCodes"];
}
}
}
这两个块(综合和消息实现)都定义了相同的消息,因此它们是冲突的。设置消息在开始时会额外检查自动生成的合成不会执行(检查 kQRunLoopOperationStateInited),所以我会删除合成,无论如何都会被忽略。
设置消息正确地实现了复制语义
self->_acceptableStatusCodes = [newValue copy];
它释放了旧值。它还执行 keyValue 更改通知。我不知道他们为什么留在合成器中——看起来他们以后可能想要状态检查,却忘记删除自动生成的获取/设置。