Нет, это не правильно.Вы отправляете сообщение release
указателю в dealloc
, но указатель может указывать или не указывать на SecondController.Это может привести к некоторым очень странным ошибкам, обычно к случайным объектам.
С точки зрения target-c, ваш класс не сохраняет (думает «свой») SecondController, поэтому он не должен пытаться выпустить егово-первых, на dealloc
.
. Чтобы правильно заявить о праве собственности и освободить его, сделайте так:
- (IBAction)SwitchView
{
self.SecondController = [[[SecondViewController alloc]
initWithNibName:@"SecondViewController" bundle:nil] autorelease];
self.SecondController.modalTransitionStyle = UIModalPresentationFullScreen;
[self presentModalViewController:self.SecondController animated:YES];
}
/// OTHER CODE HERE ///
- (void)dealloc
{
self.SecondController = nil;
[super dealloc];
}
Это также защитит вас от любых других вещей, происходящих между SwitchView
и dealloc
.(до тех пор, пока этот материал следует правилам и использует self.SecondController = ...
для изменения свойства)
В SwitchView
последовательность alloc
/ autorelease
гарантирует, что ваша подпрограмма сохраняет владение для длины подпрограммы(и немного дальше).Часть self.SecondController =
гарантирует, что ваш класс сохраняет объект SecondController
, поскольку вы объявили его (nonatomic,retain)
.