Re: With What does Apple Swizzle the IsA-pointer in KVO?
Re: With What does Apple Swizzle the IsA-pointer in KVO?
- Subject: Re: With What does Apple Swizzle the IsA-pointer in KVO?
- From: Sherm Pendley <email@hidden>
- Date: Fri, 23 Nov 2007 13:09:53 -0500
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-dev mailing list (email@hidden)
Please do not post admin requests or moderator comments to the list.
Contact the moderators at cocoa-dev-admins(at)lists.apple.com
Help/Unsubscribe/Update your Subscription:
This email sent to email@hidden