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.


You have a retain cycle - the document retain the array which retain the invocation, which retain the document.

If you save the target, selector and arguments, you can invoke the selector without NSInvocation. Don't retain the target.


Best Regards,

Nir Soffer

_______________________________________________

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 [EMAIL PROTECTED]

Reply via email to