我想知道有什么方法可以识别任何对象的变化。让我们获取任何类的对象。由于任何对象都有一些内存空间,如果我们改变对象的任何属性,那么这个内存空间应该会发生一些变化。那么有什么方法可以识别这种变化。
我有一个类,它有很多属性,我想知道是否有任何属性更改,而不是比较每个属性的先前值和当前值。
如果我有什么问题,请澄清我并建议我解决。
谢谢你的时间。
键值观察呢?你可以像这样向你的属性添加一个监听器:
YourClass *object = [YourClass new];
[object addObserver:self forKeyPath:@"property" options:NSKeyValueObservingOptionNew context:nil];
然后,当 smith 更改方法时
-(void)observeValueForKeyPath:(NSString *)keyPath ofObject:(id)object change:(NSDictionary *)change context:(void *)context
{
}
会自动触发。因此,您不需要手动比较更改,但是,您需要将观察者添加到您感兴趣的属性中
仅查看内存消耗是不够的 - 存储数字 1 或数字 2 占用完全相同的空间量......
我要么走KVO 路线(见亚历克斯的回答),要么实现一种脏标志,只要对象的属性发生变化(在-(void)setXXX:(type)value {}
方法中),你就设置它。当然,在设置新值之前,您必须将新值与当前值进行比较,或者如果您想知道与起始状态相比对象是否发生了变化,您甚至必须存储每个值之外的起始值财产。
为了使其更通用,您还可以在字典中实现所有属性,但随后您会松散类型检查和漂亮的访问器方法......
在 malloc_error_break 中设置断点进行调试。
这样做并发布回溯。
通常,这意味着您损坏了内存,但也可能意味着您有一个过度释放的对象。也尝试构建和分析。