[英]Pointer to a Pointer in Objective-C
我有一些價值觀的NSDictionary。 通常,NSDictionary中的值是靜態的,但是在極少數情況下(用戶更改設置),NSDictionary也會更改。 該詞典在整個應用程序中廣泛使用,並存儲在應用程序委托中。
我現在遇到的問題:更改設置后,我釋放了舊字典並創建了新字典。 我現在如何通知所有相關方面? 我想到了要存儲NSDictionary **指針並根據需要對其進行引用,以獲取NSDictionary *(從來沒有釋放並重新創建字典的情況)。
NSMutableDictionary* dict = [NSMutableDictionary alloc] init];
...
NSDictionary** ref = &dict;
當我運行調試器時,我可以看到取消引用ref確實使我一聽成名。 但是過了一段時間,裁判似乎指向了必殺技。 想知道我是否需要管理內存或其他。 為NSDictionary **? 由於它不是對象的指針,因此保留它沒有任何意義。 但這似乎是內存問題嗎?
我不會評論指針的復雜性,因為這實際上與這種情況無關。 此外,我不確定自己想要什么,但是我認為您正在尋找一種觀察另一個對象的變化的方法。 令人高興的是,可可提供了開箱即用的功能。
因此,您需要將此字典作為某物(您的應用程序委托)的屬性。 然后,在任何對象關心的地方使用鍵值觀察來監視該屬性的更改:
[appDelegate addObserver:self forKeyPath:@"dictPropertyName"];
然后,實現-observeValueForKeyPath:ofObject:change:context:
::
- (void)observeValueForKeyPath:(NSString *)keyPath ofObject:(id)object change:(NSDictionary *)change context:(void *)context {
if ([keyPath isEqualToString:@"dictPropertyName"]) {
// your property has changed; respond to that here
}
}
讓我知道這是否是您想要的東西。
喬納森的答案是正確的。 但是,由於這是全局性的事情,因此簡單地使用通知讓所有感興趣的各方知道字典已更改,可能會具有更多或更多的意義。
具體來說,請參見NSNotificationCenter和NSNotification 。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.