簡體   English   中英

指向Objective-C中的指針的指針

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM