繁体   English   中英

如何识别对象?

[英]How to identify a object is changed?

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

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

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

谢谢你的时间。

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

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或数字2需要完全相同的空间量......

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

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

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

这样做并发布回溯。

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM