- (void)setSomeInstance:(SomeClass *)aSomeInstanceValue
{
if (someInstance == aSomeInstanceValue)
{
return;
}
SomeClass *oldValue = someInstance;
someInstance = [aSomeInstanceValue retain];
[oldValue release];
}
好的,所以setter應該看起來像。我理解前三行 - 防止在新對象與舊對象相同的情況之前。 但是關於這條線是什麼:iOS中的默認設置器
SomeClass *oldValue = someInstance;
爲什麼系統必須保持舊對象的地址。爲什麼不能把它簡單地
[someinstance release];
someinstance = [aSomeInstanceValue retain];
我會讓最後一個陳述更強大; **如果您的設置者沒有特殊行爲,則應始終使用@property和@synthesize。如果你的設置者有特殊的行爲,你應該重新考慮你的架構。**具有自定義行爲的設置者在不斷髮展的代碼庫中是一個永無止境的痛苦源泉。 – bbum
當屬性發生變化時,需要更新的對象怎麼樣?我用了很多,並且從來沒有真正的嚴重問題。 – huesforalice
有很多理由使用自定義setter和getter。 Paul Hegarty在他的課程中給出了很多例子。確保沒有設置值的默認值是1。 - (CGFloat)scale if(!_scale){ return DEFAULT_SCALE; //不允許零刻度 }其他{ return _scale; } } – JScarry