這些屬性中刪除@synthesize
。他們提供了get/set。
編輯:爲了清晰。在.H,他們宣稱acceptableStatusCodes與
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更改通知。我不知道他們爲什麼留在綜合中 - 看起來他們可能以後想要進行狀態檢查,並忘記刪除自動生成的get/set。
我很想知道爲什麼這解決了兩個get/set的問題。 –
@LouFranco因爲如果我刪除'@synthesize'我會得到另一個'@property'需要'@synthesize'的警告,所以如果我刪除所有的自我。 acceptableStatusCodes將是錯誤 –
@LouFranco解釋添加 – justin