В настоящее время я работаю над 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