我想知道是否有任何方法來識別任何對象中的更改。讓我們接受任何階級的對象。由於任何對象都有一些內存空間,並且如果我們改變了對象的任何屬性,那麼這個內存空間應該會發生一些變化。那麼是否有任何方法可以識別這種變化。如何識別對象已更改?
我有一個類,它有很多屬性,我想知道是否有任何屬性更改或不是比較每個屬性的以前和當前值。
請澄清我,如果我得到錯誤的東西,並建議我解決。
謝謝你的時間。
我想知道是否有任何方法來識別任何對象中的更改。讓我們接受任何階級的對象。由於任何對象都有一些內存空間,並且如果我們改變了對象的任何屬性,那麼這個內存空間應該會發生一些變化。那麼是否有任何方法可以識別這種變化。如何識別對象已更改?
我有一個類,它有很多屬性,我想知道是否有任何屬性更改或不是比較每個屬性的以前和當前值。
請澄清我,如果我得到錯誤的東西,並建議我解決。
謝謝你的時間。
關鍵值觀察呢? U可以偵聽器添加到您的屬性是這樣的:
YourClass *object = [YourClass new];
[object addObserver:self forKeyPath:@"property" options:NSKeyValueObservingOptionNew context:nil];
然後,當史密斯變化的方法
-(void)observeValueForKeyPath:(NSString *)keyPath ofObject:(id)object change:(NSDictionary *)change context:(void *)context
{
}
將被自動解僱。因此,您不需要手動比較更改,但是,您將需要添加觀察器到屬性,您有興趣
謝謝亞歷克斯的答案。我會在應用這個之後更新你。 –
在malloc_error_break中設置斷點以進行調試。
做到這一點,併發布回溯。
通常,這意味着你損壞了內存,但它也可能意味着你有一個過度釋放的對象。也嘗試構建和分析。
只看內存的消耗是不夠的 - 存儲數字1或2恰恰是相同的空間量數...
我要麼去志願路線(見Alex的答案)或者實現一種髒標記,只要對象的屬性發生更改(在-(void)setXXX:(type)value {}
方法中),就會設置該標記。當然,在設置新值之前,您必須將新值與當前值進行比較,或者如果您想知道對象是否與起始狀態相比發生了變化,則除了每個值之外,您還必須存儲起始值屬性。
爲了使它更一般地,你也可以實現在字典中的所有屬性,但你鬆散型檢查,漂亮的存取方法...
你應該查找文檔上的志願。核心API很難使用,但你可以很容易地創建一些漂亮的包裝。 –