FROM : Sherm Pendley
DATE : Fri Nov 23 19:09:53 2007
On Nov 23, 2007, at 11:50 AM, Paul Sargent wrote:
>> KVO is not based on the internals of an object (which is assumed
>> to be hidden), and it does not access hiddden internals. KVO is
>> based on KVC and uses accessors.
>>
> To expand a bit, my mental model of it is (and this could be wrong):
>
> No Observing:
>
> ObjA ----setBlah:----> ObjB
>
> Observing:
>
> ObjA ----setBlah:----> ProxyForB -----setBlah:----> ObjB
> |
> |
> \-------blahChanged:---> Observer
>
> i.e. When the observer registers a proxy is inserted in the chain.
> The message is intercepted by the proxy and it notifies the Observer.
Isa-swizzling does not involve a proxy object - it changes the class
of ObjB directly by manipulating its isa ivar, hence the name.
When you observe an object, a new subclass is created that inherits
from that object's class, and overrides its KVC methods with versions
that send -willChangeValueForKey: and -didChangeValueForKey: to any
observers before and after calling the original class' KVC methods.
The observed object's class is then changed by storing a pointer to
the subclass in its isa ivar.
sherm--
Web Hosting by West Virginians, for West Virginians: http://wv-www.net
Cocoa programming in Perl: http://camelbones.sourceforge.net
DATE : Fri Nov 23 19:09:53 2007
On Nov 23, 2007, at 11:50 AM, Paul Sargent wrote:
>> KVO is not based on the internals of an object (which is assumed
>> to be hidden), and it does not access hiddden internals. KVO is
>> based on KVC and uses accessors.
>>
> To expand a bit, my mental model of it is (and this could be wrong):
>
> No Observing:
>
> ObjA ----setBlah:----> ObjB
>
> Observing:
>
> ObjA ----setBlah:----> ProxyForB -----setBlah:----> ObjB
> |
> |
> \-------blahChanged:---> Observer
>
> i.e. When the observer registers a proxy is inserted in the chain.
> The message is intercepted by the proxy and it notifies the Observer.
Isa-swizzling does not involve a proxy object - it changes the class
of ObjB directly by manipulating its isa ivar, hence the name.
When you observe an object, a new subclass is created that inherits
from that object's class, and overrides its KVC methods with versions
that send -willChangeValueForKey: and -didChangeValueForKey: to any
observers before and after calling the original class' KVC methods.
The observed object's class is then changed by storing a pointer to
the subclass in its isa ivar.
sherm--
Web Hosting by West Virginians, for West Virginians: http://wv-www.net
Cocoa programming in Perl: http://camelbones.sourceforge.net






Cocoa mail archive

