我有一个带有一些值的 NSDictionary。通常,NSDictionary 中的值是静态的,但在极少数情况下(用户更改设置),NSDictionary 会发生变化。 该词典在应用程序范围内使用并存储在应用程序委托(delegate)中。
我现在遇到的问题:当设置改变时,我释放旧词典并创建一个新词典。我现在如何通知所有相关方?我考虑过存储 NSDictionary** 指针并根据需要引用它们,以便获得 NSDictionary*(从来没有释放和不重新创建字典的情况)。
NSMutableDictionary* dict = [NSMutableDictionary alloc] init];
...
NSDictionary** ref = &dict;
当我运行调试器时,我可以看到取消引用 ref 最初确实让我听写了。但过了一段时间,似乎 ref 指向必杀技。想知道我是否需要管理内存或某事。对于 NSDictionary**?由于它不是指向对象的指针,因此保留它没有意义。但这似乎是内存问题?
最佳答案
我不打算评论指针的复杂性,因为这与这种情况确实无关。此外,我不太确定你想要什么,但我认为你正在寻找一种方法来观察一个对象在另一个对象中的变化。好消息是 Cocoa 提供了开箱即用的功能。
因此,您需要将此字典作为某物(您的应用程序委托(delegate))的属性。然后,在任何对象中使用键值观察来观察该属性的变化:
[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
}
}
如果这是您想要的,请告诉我。
关于iphone - 指向 Objective-C 中的指针的指针,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4347961/