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>
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 mails | Author | Date |
|---|---|---|
| John Love | May 15, 13:30 | |
| Graham Cox | May 15, 13:53 | |
| Torsten Curdt | May 15, 15:21 | |
| Graham Cox | May 15, 15:32 | |
| Mike Abdullah | May 15, 15:36 | |
| Torsten Curdt | May 15, 15:53 | |
| Erik Buck | May 15, 16:08 | |
| Graham Cox | May 15, 16:13 | |
| John Love | May 17, 16:01 |






Cocoa mail archive

