On Sep 23, 2011, at 3:47 PM, Charles Srstka wrote:
> On Sep 23, 2011, at 5:24 PM, Jerry Krinock wrote:
>> When creating a new project in Xcode 4.1, I get a window which is declared 
>> in the app delegate as:
>> 
>>  @property (assign) IBOutlet NSWindow *window;
>> 
>> and defined as
>> 
>>  @synthesize window ;
>> 
>> Is this not going to create unnecessary unnecessary setter and getter 
>> implementations?  Would not @dynamic be more appropriate in this situation?
> 
> Seems to me like a setter is the better way for an outside class (like 
> NSBundle, NSNib, etc.) to set the outlet properties on the owner object. I 
> know this used to work directly with ivars in the old days, but I’m still 
> puzzled as to exactly how that worked. Was NSBundle really breaking 
> encapsulation somehow and fiddling with objects’ ivars directly?

KVC first looks for a method with an appropriate name. If no method is found, 
it looks for an ivar with an appropriate name. If it finds an ivar but no 
accessor method, it will access the ivar directly. The Objective-C compiler and 
runtime provide enough metadata to inspect and manipulate an object's ivars.

Nib connection on iOS uses KVC. Nib connection on OS X does not use KVC itself, 
but it does use a similar "call method if it exists, set ivar directly if it 
does not" algorithm.

http://developer.apple.com/library/mac/#documentation/Cocoa/Conceptual/KeyValueCoding/Articles/SearchImplementation.html#//apple_ref/doc/uid/20000955-CJBBBFFA

http://developer.apple.com/library/mac/documentation/Cocoa/Conceptual/LoadingResources/CocoaNibs/CocoaNibs.html#//apple_ref/doc/uid/10000051i-CH4-SW19


-- 
Greg Parker     gpar...@apple.com     Runtime Wrangler


_______________________________________________

Cocoa-dev mailing list (Cocoa-dev@lists.apple.com)

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/archive%40mail-archive.com

This email sent to arch...@mail-archive.com

Reply via email to