2011-01-28 2 views
2

У меня есть вопрос о том, что я часто делаю. Перед созданием нового диспетчера представлений я проверяю переменную экземпляра, названную после диспетчера представлений, который я хочу каким-то образом представить.Проверьте, существует ли viewcontroller, если не alloc/init (iOS)

if (self.viewcontroller == nil) { 
    //alloc and init the viewcontroller, then set the reference to this. 
} 

//Else I use the instance variable reference without making a new object of it. 

Я делаю это на объектах, таких как viewcontroller с одним веб-просмотром. URL-адрес, который может открыть веб-просмотр, будет отличаться, но это устанавливается в методе viewWillAppear.

Это плохая практика? Я также сохраняю «подробный» viewcontroller.

Заранее спасибо.

ответ

2

В подобных случаях я обычно пишу метод геттер, как это:

- (UIViewController*) viewController 
    { 
if (!viewController) 
     { 
     viewController = [[UIViewController alloc] init]; 
    // ... any other setup that needs doing at this point. 
     } 
    return viewController; 
    } 

Это позволит мне использовать [само ViewController] на протяжении всего моего кода, а не чеком, Alloc, инициализации, сохраняют на протяжении всего моего кода ,

Это то, о чем вы спрашивали?

+1

Использование ленивой инициализации (как показано в вашем примере) - отличная идея, но вызов '-retain' не нужен и утечка экземпляра контроллера представления. Не делай этого. – jlehr

+0

Да, но я не уверен в сохранении. Почему это происходит, если у меня есть свойство, которое я освобождаю в dealloc в «родительском» контроллере view. – LuckyLuke

+0

@jlehr, спасибо за обнаружение ошибки. Я исправил это. alloc, наряду с новым и копированием, дарует право собственности. – westsider

Смежные вопросы