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: NSInvocation question




On Feb 21, 2008, at 18:22, Hank Heijink wrote:
I have a document-based application, and my NSDocument subclass runs an experiment which amounts to invoking NSInvocations based on certain conditions. These NSInvocations retain their arguments, and the target of the NSInvocation is the NSDocument subclass. I need to record these invocations as well, so I made a class MVAction as follows:

@interface MVAction : NSObject <NSCoding> {
	NSInvocation *action;
	double invocationTime;
	NSString *type;
	NSArray *arguments;
}

The type is a string representation of the selector used in the NSInvocation and the arguments are the arguments of the NSInvocation. I did it like this because you can't encode an NSInvocation, and I don't need the actual invocation anyway. My document has an instance variable NSMutableArray *actions in which these MVActions are stored.

The problem I have is this: when I close my document, it isn't deallocated. If the invocations don't retain their arguments, that problem is gone, but I do need to retain them. What's a good way to solve this? I could release the NSInvocation *action when I put an MVAction in the array, but I wonder if there's a better method.

Another fix (re-reading the docs helps) - you can create an invocation without a target, since you don't want to retain the target in this case, and the target is known anyway. Then you can use -invokeWithTarget:myDocument instead of -invoke.


The docs don't tell if -invokeWithTarget: will retain the target, so call -setTarget:nil after invoking to be sure you don't create a retain cycle.


Best Regards,

Nir Soffer

_______________________________________________

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: 
 >NSInvocation question (From: Hank Heijink <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.