我想知道有没有办法识别任何对象的变化。让我们把任何一个类的对象。由于任何对象都有一些内存空间,并且如果我们更改对象的任何属性,那么应该在此内存空间中进行一些更改。那么有没有办法确定这种变化。
我有一个类,它有很多属性,我想知道是否有任何属性被更改,而不是比较每个属性的先前和当前值。
如果我出错了,请告诉我,并建议我解决。
感谢您的时间。
答案 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中设置断点以进行调试。
这样做并发布回溯。
通常,这意味着您损坏了内存,但这也可能意味着您有一个过度释放的对象。尝试构建和分析。