Mailing Lists: Apple Mailing Lists

Image of Mac OS face in stamp
 
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: The magic of Key Value Coding and Key Value Observing




On Aug 30, 2007, at 9:29 PM, Erik Buck wrote:

The underlying implementation of Key Value Observing
uses "isa swizzling".  This is a clever trick enabled
by the Objective-C runtime.

Well, this is an implementation detail to support "*automatic* KVO". All this does is insert invocations of {will,did}ChangeValueForKey {before,after} your set accessor method implementation to save you having to do so yourself. If you want the "magic-free" version, then just implement manual notification as described in <http://developer.apple.com/documentation/Cocoa/Conceptual/KeyValueObserving/Concepts/AutoVsManual.html >.

I just can't articulate why I am uncomfortable with KVC and KVO when I am comfortable with connections in IB.

Being uncomfortable with KVC is a puzzler. It's simply providing a further level of abstraction. Would it help if you thought of it in terms of using the key to get a selector (NSSelectorFromString -- (@"key") for valueForKey: and (@"setKey:") for setValue:forKey:)[*] which is then used to invoke the corresponding accessor with an argument if appropriate?

I can understand a little more the discomfit KVO might give, since it's allowing a loose relationship between objects. But again there's a venerable existing pattern in Cocoa that provides similar functionality -- notifications. With notifications, you simply let anyone who's registered an interest know that what they're interested in has happened. And if you're interested in an event, you ask the notification centre to let you know if/when it happens. With KVO, it's much the same except that rather than asking a notification centre to mediate, you get in touch with the objects directly. I'm sure you're comfortable enough with using notifications... I hope that might help?


I look forward to language support for "properties."
and hope that they will communicate intention in a way
that I think is missing from current KVC and KVO.

The declared properties feature (as described at <http://developer.apple.com/leopard/overview/tools.html >) is orthogonal to KVC. It is possible to use KVC to access properties, and to use properties without ever using KVC.

A major design goal, however, is precisely to communicate intent (see for example the 'readonly' keyword).

mmalc


[*] Obviously it's a little more complicated than that, but if it helps you sleep at night... :-)
_______________________________________________


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:
http://lists.apple.com/mailman/options/cocoa-dev/email@hidden

This email sent to email@hidden
References: 
 >The magic of Key Value Coding and Key Value Observing (From: Erik Buck <email@hidden>)



Visit the Apple Store online or at retail locations.
1-800-MY-APPLE

Contact Apple | Terms of Use | Privacy Policy

Copyright © 2007 Apple Inc. All rights reserved.