En cacao, addObserver:forKeyPath:options:context:
conserva "ni el receptor, ni anObserver". Por lo tanto, supongo que la observación de uno mismo está permitida; es decir, es perfectamente válido para hacer algo comoYo observador en Cocoa
[self addObserver:self forKeyPath...]
Como siempre que se recuerde para anular el registro self
como observador como la primera cosa en dealloc.
¿Es correcta esta suposición?
Esto no es una buena idea. Generalmente se espera que 'obj.foo = bar;' sea equivalente a '[obj setFoo: bar];' y desviarse de este patrón confundirá a otros que están leyendo/manteniendo su código – rpetrich
@rpetrich Estoy de acuerdo en que esto no es así. una buena idea (escribí esa respuesta hace más de 18 meses), pero por una razón diferente. Ya no usaría '@ synthesize'; Ahora escribiría todo el getter y setter. La carga adicional de algunas líneas adicionales supera el costo de seguir mentalmente las llamadas al método extra (todavía utilizaría '@ property'). No estoy de acuerdo en que los efectos secundarios en setters (o getters) sean intrínsecamente malos. Deben evitarse cuando sea posible. Por ejemplo, establecer 'hypotheticalQueryObject.maxResults = 4;' podría activar legítimamente otra búsqueda. –
@rpetrich Eso en realidad está garantizado. 'obj.foo = bar;' siempre utiliza cualquier implementación de 'setFoo:' que se proporciona (incluso si ha redefinido una sintetizada). –