Как сделать метод класса распределителя в Objective-C? - PullRequest
1 голос
/ 22 апреля 2009

У меня есть класс NSFoo, у которого есть свойство bar. Я хочу иметь метод класса, чтобы получить экземпляр NSFoo с установленным свойством bar. Это будет похоже на метод класса NSString stringWithFormat. Таким образом, подпись будет:

+ (NSFoo *) fooWithBar:(NSString *)theBar;

Так что я бы назвал это так:

NSFoo *foo = [NSFoo fooWithBar: @"bar"];

Я думаю, это может быть правильно:

+ (NSFoo *) fooWithBar:(NSString *)theBar {
  NSFoo *foo = [[NSFoo alloc] init];
  foo.bar = theBar;
  [foo autorelease];
  return foo;  
}

Это выглядит правильно?

Ответы [ 2 ]

2 голосов
/ 22 апреля 2009

Да, ваша реализация выглядит правильно. Поскольку -[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;  
}
2 голосов
/ 22 апреля 2009

Да. Это выглядит правильно. И ваша реализация кажется обычной практикой.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...