0

我想知道有什么方法可以识别任何对象的变化。让我们获取任何类的对象。由于任何对象都有一些内存空间,如果我们改变对象的任何属性,那么这个内存空间应该会发生一些变化。那么有什么方法可以识别这种变化。

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

如果我有什么问题,请澄清我并建议我解决。

谢谢你的时间。

4

3 回答 3

2

键值观察呢?你可以像这样向你的属性添加一个监听器:

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
{

}

会自动触发。因此,您不需要手动比较更改,但是,您需要将观察者添加到您感兴趣的属性中

于 2013-08-27T13:39:16.923 回答
1

仅查看内存消耗是不够的 - 存储数字 1 或数字 2 占用完全相同的空间量......

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

为了使其更通用,您还可以在字典中实现所有属性,但随后您会松散类型检查和漂亮的访问器方法......

于 2013-08-27T15:02:24.977 回答
-1

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

这样做并发布回溯。

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

于 2013-08-27T13:39:35.763 回答