Для перераспределения @property
типа (retain)
вы не должны освобождать его явно
//this is wrong
if(self.m_tabbarController != nil)
{
[self.m_tabbarController release];
}
/////////////////////
только эта строка будет нормально работать для перераспределения.
self.m_tabbarController = [[TabbarController alloc] init];
Причина в том, что -> для свойства (retain)
, когда мы делаем self.obj = nil или (новое размещение), это означает
[obj release];
obj = nil or (new allocation)
Ваше приложение аварийно завершает работу, поскольку m_tabbarController
сталкивается с двойным выпуском из-за явного и неявного выпуска как в первый раз вы явно вызываете release по [self.m_tabbarController release];
, а следующее неявное освобождение происходит во время присваивания self.m_tabbarController = [[TabbarController alloc] init];