I suspect that to be the case when I received this code for study.

Scenario:   MyWindowController:NSWindowController ----->  
MyViewController:NSViewController (a delegate)



Inside 'MyViewController':

- (id)initWithSerial:(NSString *)_serial email:(NSString *)_email 
delegate:(NSObject <MyControllerProtocol>*)_delegate {
        self = [super init];
        serial = [_serial retain];
        email = [_email retain];
        //!!!: Delegating objects do not (and should not) retain their 
delegates. 
        // However, clients of delegating objects (applications, usually) are 
responsible for ensuring that their delegates are around to receive delegation 
messages.
        // Is 'MyController' a client of a delegating object?
        delegate = [_delegate retain];     // ...should this be 'retain' or 
'assign'?
        return self;
}

On Jan 12, 2011, at 12:45 PM, Corbin Dunn wrote:

> Clients of delegating objects are the things that hold onto the delegating 
> objects. So, for example, if you have a bunch of NSWindowController instances 
> those objects are usually delegates for NSWindows. Now, the 
> NSWindowControllers need someone to hold onto them. Typically your global 
> NSApplication object (or something else). That object is the client of the 
> NSWindowController, and needs to retain the NSWindowControllers. 
> 
> All delegates (in general) should be "assign" to avoid cycles. In your 
> particular case, your window controller will probably need to keep track of 
> all of its NSViewController instances via a retain (maybe an NSArray). 
> However, even if your NSWindowController is the delegate of the 
> NSViewController, it should not be retained via the delegate (by convention).
> 
> corbin

If I understand you right, NSWindowController is a client (instantiated within) 
the NSApplication and hence, should be retained.
Yet, NSWindowConroller is a delegate of NSWindow, so it should be assigned to  
(vs retained by) NSWindow.

NSApplication ---> [NSWindowController retain] <----- delegate 
[NSWindowController assign] ---- NSWindow.

This setup has a broken cycle, with the NSWindowController strongly linked to 
NSApplication, yet weakly linked (as a delegate) to its host.

In my case (above) there's no delegate client, merely an object with its 
delegate and hence, should be weakly linked via assign.

Ric.

_______________________________________________

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