如何识别对象?

时间:2013-08-27 13:31:15

标签: iphone ios ipad model nsobject

我想知道有没有办法识别任何对象的变化。让我们把任何一个类的对象。由于任何对象都有一些内存空间,并且如果我们更改对象的任何属性,那么应该在此内存空间中进行一些更改。那么有没有办法确定这种变化。

我有一个类,它有很多属性,我想知道是否有任何属性被更改,而不是比较每个属性的先前和当前值。

如果我出错了,请告诉我,并建议我解决。

感谢您的时间。

3 个答案:

答案 0 :(得分:2)

关键值观察怎么样? 你可以像这样在你的属性中添加一个监听器:

YourClass *object = [YourClass new];
[object addObserver:self forKeyPath:@"property" options:NSKeyValueObservingOptionNew context:nil];

然后,当史密斯改变方法时

 -(void)observeValueForKeyPath:(NSString *)keyPath ofObject:(id)object change:(NSDictionary     *)change context:(void *)context
{

}

将自动触发。所以,你不需要手动比较变化,但是,你需要在属性中添加观察者,你感兴趣

答案 1 :(得分:1)

仅仅考虑内存消耗是不够的 - 存储数字1或数字2需要相同的空间量...

我要么去 KVO路线(请参阅alex的答案)或实现一种脏标志,只要对象的属性发生变化(在-(void)setXXX:(type)value {}方法)。当然,在设置新值之前,您必须将新值与当前值进行比较,或者如果您想知道对象是否与起始状态相比发生了更改,您甚至必须存储除每个值之外的起始值属性。

为了使它更通用你也可以在字典中实现所有属性,但是你松散了类型检查和很好的访问方法......

答案 2 :(得分:-1)

在malloc_error_break中设置断点以进行调试。

这样做并发布回溯。

通常,这意味着您损坏了内存,但这也可能意味着您有一个过度释放的对象。尝试构建和分析。