Вторая, более общая цель для этого шаблона в Какао состоит в том, что Obj-C и Какао поощряют чрезвычайно длинные, подробные имена для методов и переменных, поэтому один вызов метода может в конечном итоге занимать несколько строк; использование вызовов методов в качестве прямых аргументов для других методов может быстро стать нечитаемым, поэтому соглашения поощряют настройку каждого аргумента для метода заблаговременно, помещая их в промежуточные переменные, затем используя переменные в качестве аргументов для повышения удобочитаемости и облегчая их изменение один аргумент без необходимости копаться во вложенных вызовах методов.
тоящее время я работаю над Apress "Beginning iPhone 3 Development". Стандарт, который они используют в своих приложениях-примерах, похож на следующий код:
- (void)viewDidLoad {
BlueViewController *blueController = [[BlueViewController alloc]
initWithNibName:@"BlueView" bundle:nil];
self.blueViewController = blueController;
[self.view insertSubview:blueController.view atIndex:0];
[blueController release];
}
8.14.11 ОБНОВЛЕНИЕ (дополнительная информация)
blueViewController объявлен следующим образом:
@property (retain, nonatomic) BlueViewController *blueViewController;
Всякий раз, когда они выполняютalloc
они помещают это в какую-то временную переменную (здесьblueController
) тогда они назначают это, тогда они выпускают это. Эта временная переменная мне кажется излишней.
Я упростил код следующим образом:
- (void)viewDidLoad {
self.blueViewController = [[BlueViewController alloc]
initWithNibName:@"BlueView" bundle:nil];
[self.view insertSubview:blueViewController.view atIndex:0];
}
- (void)dealloc {
[blueViewController release];
[super dealloc];
}
Мой модифицированный код работал точно так же в симуляторе iPhone. Теперь я знаю правило, что если вы выделяете что-то, вам нужно его освободить. И я освещаю это в моемdealloc
метод. Но есть ли какое-то преимущество в том, что релиз будет прямо вViewDidLoad
(функция, в которойalloc
назывался)? Или одинаково хорошо иметьrelease
в вашейdealloc
такой метод?
Спасибо за любую помощь,
-j