With the latest releases of XCode that contain static analyzers, some of my objects are throwing getting analyzer issues reported. Specifically, I have an object that owns itself and is responsible for releasing itself, but should also be returned to the caller and possibly retained there manually.
If I have a method like + (Foo) newFoo
the analyzer sees the word New and reports an issue in the caller saying that newFoo
is expected to return an object with retain +1, and it isn't being released anywhere. If I name it + (Foo) getFoo
the analyzer reports an issue in that method, saying there's a potential leak because it's not deallocated before returning.
My class basically looks like this:
+ (Foo *) newFoo {
Foo *myFoo = [[[Foo new] retain] autorelease];
[myFoo performSelectorInBackground:@selector(bar) withObject:nil];
return myFoo;
}
- (void) bar {
//Do something that might take awhile
[self release];
}
The object owns itself and when its done, will release itself, but there's nowhere that it's being stored, so the static analyzer sees it as a leak somewhere. Is there some naming or coding convention to help?