2013-08-27 64 views
0

我想知道是否有任何方法來識別任何對象中的更改。讓我們接受任何階級的對象。由於任何對象都有一些內存空間,並且如果我們改變了對象的任何屬性,那麼這個內存空間應該會發生一些變化。那麼是否有任何方法可以識別這種變化。如何識別對象已更改?

我有一個類,它有很多屬性,我想知道是否有任何屬性更改或不是比較每個屬性的以前和當前值。

請澄清我,如果我得到錯誤的東西,並建議我解決。

謝謝你的時間。

+1

你應該查找文檔上的志願。核心API很難使用,但你可以很容易地創建一些漂亮的包裝。 –

回答

2

關鍵值觀察呢? 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 
{ 

} 

將被自動解僱。因此,您不需要手動比較更改,但是,您將需要添加觀察器到屬性,您有興趣

+0

謝謝亞歷克斯的答案。我會在應用這個之後更新你。 –

-1

在malloc_error_break中設置斷點以進行調試。

做到這一點,併發布回溯。

通常,這意味着你損壞了內存,但它也可能意味着你有一個過度釋放的對象。也嘗試構建和分析。

1

只看內存的消耗是不夠的 - 存儲數字1或2恰恰是相同的空間量數...

我要麼去志願路線(見Alex的答案)或者實現一種髒標記,只要對象的屬性發生更改(在-(void)setXXX:(type)value {}方法中),就會設置該標記。當然,在設置新值之前,您必須將新值與當前值進行比較,或者如果您想知道對象是否與起始狀態相比發生了變化,則除了每個值之外,您還必須存儲起始值屬性。

爲了使它更一般地,你也可以實現在字典中的所有屬性,但你鬆散型檢查,漂亮的存取方法...