0
在我將對象分配給已經分配了對象的ivar的情況下,首先檢查是否已經分配給該ivar 。當已經分配給特定的ivar時將對象分配給ivar
例如,代碼A代碼B?
一個
if (ivar != anObject)
{
ivar = anObject;
}
乙
ivar = anObject;
在我將對象分配給已經分配了對象的ivar的情況下,首先檢查是否已經分配給該ivar 。當已經分配給特定的ivar時將對象分配給ivar
例如,代碼A代碼B?
if (ivar != anObject)
{
ivar = anObject;
}
ivar = anObject;
它不是絕對必要的,我相信@財產/ @合成產生的制定者做到這一點作爲優化和停止unneseccary內存管理調用相同對象(對於強屬性,舊對象被釋放並且新對象被保留,但是如果它們是相同指針,則最終結果是保留計數不變)
除了存儲器管理方法的支票也將防止不必要的KVO通知。 – 2012-07-14 09:41:18
@BenedictCohen我不認爲這是真的。 KVO通知是在一個子類的setter實現中發送的,因此他們不知道實際值是否已更改 – wattson12 2012-07-14 09:46:35
是的,您是正確的。我的錯。 '@ synthesize'不會觸發KVO通知,它們由'NSObject'處理。如果自動通知關閉(使用'automatedNotifiesObserversForKey:'),則@合成'屬性不會引發KVO通知。 – 2012-07-14 10:08:30