С последними выпусками XCode, которые содержат статические анализаторы, некоторые из моих объектов выдают сообщения о проблемах анализатора. В частности, у меня есть объект, который владеет собой и отвечает за его освобождение, но также должен быть возвращен вызывающей стороне и, возможно, сохранен там вручную.
Если у меня есть метод, подобный + (Foo) newFoo
, анализатор видит слово New и сообщает о проблеме в вызывающей стороне, говоря, что newFoo
должен вернуть объект с сохранением +1, и он нигде не будет освобожден. Если я назову его + (Foo) getFoo
, анализатор сообщит о проблеме в этом методе, заявив, что существует потенциальная утечка, поскольку она не освобождается до возврата.
Мой класс в основном выглядит так:
+ (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];
}
Объект владеет собой и, когда это будет сделано, сам выпустит, но он нигде не хранится, поэтому статический анализатор видит его где-то как утечку. Есть ли какое-либо соглашение об именах или кодировании, чтобы помочь?