Почему исключения должны быть немного медленнее, чем нормальные возвраты?
, пока Вы не печатаете stacktrace к терминалу, сохраните его в файл или что-то подобное, блок выгоды больше не делает работы, чем другие блоки кода. Так, я не могу вообразить, почему "бросок новый my_cool_error ()" должен быть, это замедляется.
Хороший вопрос и я с нетерпением ждем дополнительной информации об этой теме!
Да, на самом деле нет никакой причины, по которой вы не можете наблюдать себя. Но, как вы сказали, как и любое наблюдение KVO, убедитесь, что вы удалили себя в качестве наблюдателя, прежде чем быть освобожденным.
Для протокола, один альтернативный способ сделать это, если вы просто говорите о простом ключе, - это написать собственный установщик и выполнить любой код, который вам нужен в установщике. Этот стиль делает более очевидным, каковы все эффекты вызова сеттера. Однако способ KVO более гибкий и работает с ключевыми путями, которые содержат несколько компонентов.
Я делаю то, что сказал Брайан Вебстер. Вот пример:
//.h
...
@property(readwrite, retain, setter=setMyPropertySynth:) id myProperty;
-(void)setMyProperty:(id)newValue;
....
//.m
...
@synthesize myProperty;
-(void)setMyProperty:(id)newValue
{
//add code here
[self setMyPropertySynth:newValue];
//add more code here
}
...
Не удаляйте наблюдателя в -dealloc
. Почему? Потому что, когда вы включите сборщик мусора, все перестанет работать; -dealloc
никогда не вызывается. Вам просто нужно использовать методы -dealloc
и -finalize
для кода очистки , связанного с памятью.