Skip navigation.
 
mlRe: Basic info about outlets
FROM : Mike Abdullah
DATE : Thu May 15 15:36:17 2008

Furthermore, if you want to see it in action a little more:

If you create an object with an outlet like so:

   IBOutlet NSWindow *window

and also give it methods like so:

   - (NSWindow *)window;
   - (void)setWindow:(NSWindow *)aWindow;

When loading the nib, rather than directly setting the instance 
variable, the system is kind enough to call the accessor method for 
you instead. So, you can stick a breakpoint on -setWindow: and watch 
it happen. There's no real magic, just variables getting hooked up.

Mike.

On 15 May 2008, at 14:21, Torsten Curdt wrote:

> Hm ...I would have though the runtime would just do dependency/
> reference injection.
> And the procedural code has a (hidden) reference/parameter to the 
> object instance - that would be "self".
>
> cheers
> --
> Torsten
>
> On May 15, 2008, at 13:53, Graham Cox wrote:
>

>> Yep, you're basically correct, sounds right to me.
>>
>> When the nib is loaded, <documentWindow> will point to ("refer to") 
>> the window object.
>>
>> someMethod is able to simply use the variable <documentWindow> 
>> because that is an instance variable of the MyDocument object, and 
>> all methods of MyDocument are able to use the object's ivars as if 
>> they were locally declared. This is one of the main reasons that 
>> OOP is a useful way to program.
>>
>> so someMethod could then message the window itself, for example:
>>
>> - (void) someMethod
>> {
>>  // set a property:
>>
>>  [documentWindow setTitle:@"Arrooooggahh!!"];
>>
>>  // read a property:
>>
>>  NSRect wFrame = [documentWindow frame];
>> }
>>
>>
>> If you're asking *how* this works, the answer lies in the Obj-C 
>> runtime. Basically all of an object's methods are implicitly passed 
>> a pointer to the object itself (self) as a hidden parameter to the 
>> function that the method is wrapping. The compiler thus generates 
>> code that makes use of this implicit parameter, so the real code is 
>> really doing the equivalent of:
>>
>> void someMethod( NSDocument* self )
>> {
>>  setTitle( self->documentWindow, @"string" );
>> }
>>
>> underneath, it's all procedural ;-) (I'm simplifying, it's not 
>> literally quite like this, Find out more here: file:///Developer/Documentation/DocSets/com.apple.ADC_Reference_Library.CoreReference.docset/Contents/Resources/Documents/documentation/Cocoa/Reference/ObjCRuntimeRef/index.html)
>> .
>>
>> hth,
>>
>>
>> G.
>>
>>
>>
>> On 15 May 2008, at 9:30 pm, John Love wrote:
>>

>>> I *think* I understand about outlets and actions .. but now I am 
>>> not so
>>> sure.
>>>
>>> Specifically, if I set (NSWindow *)documentWindow as an Outlet in 
>>> my main
>>> nib and I declare in MyDocument.h file:
>>>
>>> interface MyDocument:NSDocument {
>>>        IBOutlet NSWindow *documentWindow;
>>> }
>>> ...
>>>
>>> - (void) someMethod:documentWindow;
>>>
>>> and in MyDocument.m file:
>>>
>>> - (void) someMethod {
>>>    // some operation that accesses a property of documentWindow
>>> }
>>>
>>> Okay, documentWindow is typed as a outlet in the main nib and in the
>>> interface,.h, file ... and I have control-dragged from the 
>>> FileOwner to the
>>> title bar of the Window, selecting "documentWindow" as the 
>>> Outlet.  But,
>>> just exactly HOW does the actual documentWindow object get passed 
>>> so that
>>> someMethod can look at one of its properties?
>>>
>>> This question is oriented to "behind the scenes".
>>>
>>> Thanks in advance>
>>>
>>> John Love
>>> _______________________________________________
>>>
>>> Cocoa-dev mailing list (<email_removed>)
>>>
>>> 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/graham.<email_removed>
>>>
>>> This email sent to graham.<email_removed>

>>
>> _______________________________________________
>>
>> Cocoa-dev mailing list (<email_removed>)
>>
>> 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_removed>
>>
>> This email sent to <email_removed>

>
> _______________________________________________
>
> Cocoa-dev mailing list (<email_removed>)
>
> 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_removed>
>
> This email sent to <email_removed>

Related mailsAuthorDate
mlBasic info about outlets John Love May 15, 13:30
mlRe: Basic info about outlets Graham Cox May 15, 13:53
mlRe: Basic info about outlets Torsten Curdt May 15, 15:21
mlRe: Basic info about outlets Graham Cox May 15, 15:32
mlRe: Basic info about outlets Mike Abdullah May 15, 15:36
mlRe: Basic info about outlets Torsten Curdt May 15, 15:53
mlRe: Basic info about outlets Erik Buck May 15, 16:08
mlRe: Basic info about outlets Graham Cox May 15, 16:13
mlRe: Basic info about outlets John Love May 17, 16:01