我們有這個奇怪的問題。 當我們實例化一個對象,我們也實例屬於該對象的屬性:當一個對象被實例化時,在將NSKeyValueNotifyObserver消息發送到釋放對象時,如何發生BAD ACCESS
-(instancetype)init
{
self = [super init];
if (self) {
[self setDocument];
}
return self;
}
-(void)setDocument:
{
_flatGraphicsArrayController = [[NSArrayController alloc] initWithContent:doc.flattenedObjects];
}
...偶爾EXC_BAD_ACCESS
發生在_flatGraphicsArrayController
此崩潰已被確定是由於將NSKeyValueNotifyObserver
消息發送到釋放對象,該對象似乎正在觀察對flatGraphicsArrayController
對我來說,這是非常令人困惑的,因爲擁有這個屬性的對象剛被實例化,那麼怎麼可能觀察到屬性的變化?
是否有人註冊觀察一個特定的內存地址(如果這是它是如何工作的),然後flatGraphicsArrayController
以某種方式佔用了內存中的空間,而觀察者被釋放?
感謝您的回答;這就是問題所在。當一個不同類型的對象佔據舊Object2的內存空間時會發生什麼? –
不客氣。我不確定你在問什麼。在這種情況下,「不同類型的對象佔用舊Object2的內存空間」的可能性很大。這纔是重點。 –
因此,KVO系統不關心被觀察的對象 - 如果它被釋放並被不同類型的對象替換,並且新對象改變,它仍然發送通知?例如,某事正在觀察一個Person對象。人獲得釋放。 Dog對象替換它在內存中的位置。 Dog對象發生變化,原始觀察者是否會收到通知?或者,如果Person對象被另一個人取代,原始觀察者只會得到通知? –