Да, ваша реализация выглядит правильно. Поскольку -[NSObject autorelease]
возвращает self
, вы можете написать оператор возврата как return [foo autorelease]
. Некоторые люди рекомендуют автоматическое освобождение объекта при выделении, если вы собираетесь использовать автоматическое освобождение (в отличие от освобождения), поскольку оно проясняет намерение и сохраняет весь код управления памятью в одном месте. Ваш метод может быть записан как:
+ (NSFoo *) fooWithBar:(NSString *)theBar {
NSFoo *foo = [[[NSFoo alloc] init] autorelease];
foo.bar = theBar;
return foo;
}
Конечно, если существует -[NSFoo initWithBar:]
, вы, вероятно, написали бы этот метод как
+ (NSFoo *) fooWithBar:(NSString *)theBar {
NSFoo *foo = [[[NSFoo alloc] initWithBar:theBar] autorelease];
return foo;
}