2013-08-27 2 views
0

Я хочу знать, что есть способ идентифицировать изменения в любом объекте. Позволяет взять объект любого класса. Поскольку у любого объекта есть некоторое пространство памяти, и если мы изменим какое-либо свойство объекта, то в этом пространстве памяти должно произойти какое-то изменение. Так есть ли способ идентифицировать это изменение.Как изменить объект?

У меня есть класс и у него много свойств, и я хочу знать, что есть какое-либо свойство, измененное или нет, вместо сравнения предыдущего и текущего значений каждого свойства.

Пожалуйста, уточните меня, если я получу что-то неправильно и предложите мне решение.

Спасибо за ваше время.

+1

Вы должны посмотреть документацию на КВО. Ядро API довольно противно использовать, но вы можете легко создавать интересные обложки. –

ответ

2

Как насчет наблюдения за ключевыми значениями? U можно добавить слушатель в собственность, как это:

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 
{ 

} 

будет срабатывать автоматически. Итак, вам не нужно сравнивать изменения вручную, но, тем не менее, вам нужно будет добавить наблюдателей к свойствам, вас интересует

+0

Спасибо, Алекс за ваш ответ. Я буду обновлять вас после применения этого. –

-1

Установите точку останова в malloc_error_break для отладки.

Сделайте это и отправьте назад.

Обычно это означает, что вы испорчены памятью, но это также может означать, что у вас есть над-выпущенный объект. Попробуйте «Сборка и анализ».

1

Просто глядя на потребление памяти будет недостаточно - хранение номер 1 или номер 2 принимает точно такое же количество пространства ...

я бы либо пойти Кво маршрут (см ответ Алексу) или реализовать своего рода грязный флаг, который вы устанавливаете при изменении свойства объекта (в методе -(void)setXXX:(type)value {}). Конечно, вам нужно будет сравнить новое значение с текущим, прежде чем устанавливать новое значение, или если вы хотите узнать, изменился ли объект по сравнению с начальным состоянием, вам даже нужно было бы сохранить начальное значение в дополнение к каждому значению имущество.

Чтобы сделать его более общим, вы также можете реализовать все свойства в словаре, но тогда вы теряете контроль типов и хорошие методы доступа ...

Смежные вопросы