Re: Re(2): Strange crash, CFBundle*
Re: Re(2): Strange crash, CFBundle*
- Subject: Re: Re(2): Strange crash, CFBundle*
- From: Douglas Davidson <email@hidden>
- Date: Tue, 11 Dec 2001 09:16:52 -0800
On Tuesday, December 11, 2001, at 12:31 AM, Jens Bauer wrote:
Here's a shortened down version of code I did not write myself:
static bool myfunction()
{
CFBundleRef bundle;
CFURLRef resources;
bundle = CFBundleGetMainBundle();
if(!bundle)
{
return(FALSE);
}
resources = CFBundleCopyResourcesDirectoryURL(bundle);
--> CFRelease(bundle);
if(!resources)
{
return(FALSE);
}
...
...
}
You mention that I should not release something that was returned to me
by a
"get" function. Is the above CFRelease(bundle) wrong then ?
Yes! You will see random crashes if you release the result of
CFBundleGetMainBundle().
Remember the rules: exactly one release for each API call with
"create", "copy", or "retain" in it.
One further point is that you don't actually need to release bundles
that you don't want to be unloaded--and the main bundle would fall into
this category. Bundle instances are uniqued, so not releasing a bundle
doesn't cause a leak if that bundle wasn't going to go away.
Douglas Davidson