可以用KVO来观察全局变量吗?

sul*_*lik 5 cocoa-touch objective-c key-value-observing

我有一个gloabal变量,User * currentUser;可能会从任何类更改.我希望保存它以适应NSUserDefaults任何变化.

是否可以将KVO用于这样的全局变量,还是有其他方法可以实现类似的效果?

我添加了我的app委托作为观察者currentUser:

 [self addObserver:self forKeyPath:@"currentUser" options:NSKeyValueObservingOptionNew context:nil];
Run Code Online (Sandbox Code Playgroud)

-

-(void)observeValueForKeyPath:(NSString *)keyPath
                     ofObject:(id)object
                       change:(NSDictionary *)change
                      context:(void *)context
{
    if ([keyPath isEqualToString:@"currentUser"])
    { 
        NSDictionary * userDict = [currentUser dictionaryRepresantation];

        [UserDefaults setObject:userDict forKey:@"USER_DATA"];
        [UserDefaults synchronize];
    }
}
Run Code Online (Sandbox Code Playgroud)

但这并没有被称为.

Sve*_*ven 4

您无法为全局变量添加观察者,KVO 仅适用于对象的属性。您可以将全局变量包装在应用程序委托上的 getter/setter 对中,但是您也可以使用常规属性,因为只有使用 setter 进行的更改才会触发 KVO 通知。

另外,无论如何,您都不应该使用全局变量,即使您将它们伪装成“单例”也是如此。