Освобождает ли контроллер представления все его свойства? - PullRequest
3 голосов
/ 15 марта 2012

У меня есть BaseViewController, который является подклассом UITabBarController, и я настроил мои представления в этом контроллере представления.

-(void)setUpViews
{
FirstController *mainViewController = [[FirstController alloc] initAssignment:delegate.currentAssignment withMutableArray:myArray];
UINavigationController *firstNavController = [[UINavigationController alloc] initWithRootViewController:mainViewController];


SecondController *secondViewController = [[SecondController alloc] initWithNibName:@"SecondController" bundle:nil];
UINavigationController *secondNavController = [[UINavigationController alloc] initWithRootViewController:secondViewController];


self.viewControllers = [NSArray arrayWithObjects:firstNavController, secondNavController,nil];

firstNavController.tabBarItem.image = [UIImage imageNamed:@"blablabla.png"];
firstNavController.tabBarItem.title = @"Stream";


secondViewController.tabBarItem.image = [UIImage imageNamed:@"blabla.png"];
secondViewController.tabBarItem.title = @"Favourite";
}

Теперь у меня есть другой контроллер представления, я называю его ViewHandlerController, подклассBaseViewController.в моем viewDidLoad в этом viewHandler я вызываю setUpViews, который объявлен в BaseViewController.На первом экране моего приложения, когда нажата кнопка «Вход», я создаю экземпляр своего ViewHandlerController и успешно представляю свой tabcontroller с контроллерами nav с помощью.

[[[UIApplication sharedApplication].windows objectAtIndex:0] addSubview:viewControllerHandler.view];

Внутри моего приложения.есть кнопка выхода.Я использую NSNotificationCenter для вызова метода logoutMethod, который объявлен на моем первом экране.Мой вопрос заключается в том, как в этом методе выхода из системы, как я могу освободить ранее выделенные объекты, чтобы избежать нехватки памяти, так как пользователь может войти снова (logIn - logOut -logIn)?так как я использую ARC, установка моего ViewController в NIL будет выполнять всю очистку?

EDIT: удаление моего ViewControllerHandler из superview и установка его в nil также помогает освободить его подпредставления?

Приветствия

Ответы [ 2 ]

2 голосов
/ 16 марта 2012

Ну, ответьте на ваш вопрос (не ARC) - нет, контроллер вида не высвобождает свои свойства при выпуске. Но вы должны обнулять свои свойства в методах viewDidUnload и (или) dealloc.

Если вы используете ARC, вы должны заметить, что некоторые действия могут сохранить ваш контроллер, и в некоторых случаях его нельзя удалить. Следите за методами, которые принимают объект для делегата, они могут не использовать слабые ссылки

1 голос
/ 16 марта 2012

Посмотрите на эту статью Apple об управлении памятью .

Вы можете просто использовать autorelease в методах alloc или for (UIView *view in [self.view subviews]) {view release}; в dealloc .

enter image description here

На самом деле освобождение является противоположной операцией для сохранения. Когда вы сохраняете, вы увеличиваете на 1 количество экземпляров объекта в выделенной памяти. Это происходит, когда вы звоните alloc, copy, new, mutableCopy. Если вы используете ARC, вы не можете освобождать объекты, управление памятью уже не ваша проблема.

...