Re: Memory Management question
Re: Memory Management question
- Subject: Re: Memory Management question
- From: Robert Marini <email@hidden>
- Date: Fri, 26 Dec 2008 00:45:50 -0500
Indeed, you have no way of guaranteeing that link still exists as you
are not explicitly claiming ownership to it. In the first case of
your if, you receive an autoreleased NSURL instance (a new object
created by using the contents of the link object). In the second, all
your code is doing is deciding that desiredURL should point to the
same object as link without claiming ownership of it. To ensure that
you hold ownership of it, you need to explicitly retain it (code
executing in the context of another thread might release it and cause
it to receive -dealloc) or copy it (the former probably being the more
appropriate in this case). Following that, it should be released when
it is no longer of any relevance in this particular context.
Therefor, I think you'll find that your findings are indeed the
expected behavior - if it's worked in the past it's due more to luck
than to anything else.
-rob.
On Dec 25, 2008, at 2:30 PM, Scott Wilson wrote:
I have an odd case. I've got a NSTextView delegate method which
looks like this:
- (BOOL) textView: (NSTextView *) textView
clickedOnLink: (id) link
atIndex: (unsigned) charIndex
{
...
NSURL *desiredURL;
// is it a NSURL link or a NSString link?
if ([link isKindOfClass: [NSString class]])
{
...
desiredURL = [NSURL URLWithString: [link
stringByAddingPercentEscapesUsingEncoding: NSUTF8StringEncoding]
relativeToURL: lastOpened];
} else if ([link isKindOfClass: [NSURL class]]) // this is the
case which causes the problem!!
{
desiredURL = link; // it's a regular file:// URL
} else return NO;
NSLog(@"url %@", [desiredURL path]); // get EXC_BAD_ACCESS if link
was an NSURL
...
}
If I change the code above to desiredURL = [link retain] everything
is fine. I've used very similar code with no problems in a different
context.
Is it possible that link is being autoreleased before my method has
returned?
Thanks
_______________________________________________
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:
This email sent to email@hidden
Attachment:
smime.p7s
Description: S/MIME cryptographic signature
_______________________________________________
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:
This email sent to email@hidden