如何在iOS中标记属性并跟踪它';整个应用程序的状态是什么?

如何在iOS中标记属性并跟踪它';整个应用程序的状态是什么?,ios,properties,instance-variables,Ios,Properties,Instance Variables,有没有一种方法可以在应用程序的整个生命周期中标记属性或实例变量并查看其变化 这样做的目的是了解属性是如何改变的,以及当该值被大量传递时,什么类/对象改变了它的值?这样,我们可以在每次更改时看到它的值,而不是用断点填充代码。您不能标记属性或实例变量。 但是您可以对属性/实例变量进行键值观察(KVO),以查找新旧值的变化KVO允许您观察属性或值的更改 例如,如果在特定属性/实例变量上设置观察者,如下所示 [self addObserver:self forKeyPath:@"object.sampl

有没有一种方法可以在应用程序的整个生命周期中标记属性或实例变量并查看其变化


这样做的目的是了解属性是如何改变的,以及当该值被大量传递时,什么类/对象改变了它的值?这样,我们可以在每次更改时看到它的值,而不是用断点填充代码。

您不能标记属性或实例变量。 但是您可以对属性/实例变量进行
键值观察(KVO)
,以查找新旧值的变化
KVO
允许您观察属性或值的更改

例如,如果在特定属性/实例变量上设置观察者,如下所示

[self addObserver:self forKeyPath:@"object.sampleInstance" options:NSKeyValueObservingOptionNew|NSKeyValueObservingOptionOld context:nil];
每当您对该属性进行这样的更改时

[object setSampleInstance:@"Hai"];
它会打电话的

-(void)observeValueForKeyPath:(NSString *)keyPath ofObject:(id)object change:(NSDictionary *)change context:(void *)context
{
    id newVal = (id)[change objectForKey:NSKeyValueChangeNewKey];
    id oldVal = (id)[change objectForKey:NSKeyValueChangeOldKey];
    NSLog(@"KVO new %@", newVal);
    NSLog(@"KVO old %@", oldVal);
}

由此,您可以跟踪属性/实例变量

您可以覆盖setter和日志堆栈traceYeah,这与覆盖setter和nslogging具有相同的效果。问题是,跟踪一堆NSLog可能会很乏味。谢谢。