Curnelious
Curnelious

Reputation: 1

Clearing memory when removing a viewController

I have this view controller (class1) , which has a UICollectionView in it . When i am finish with this view, i am going to the next view, but i can see that the memory consumption of this view(class1) is not cleared and being added to the next view (class2).

Both view controllers are made with storyboard, and has a name , and when i finish with view1 (class1) i am going to the next one with :

//in view1 i do when exit
    UIViewController *mainV=[self.storyboard instantiateViewControllerWithIdentifier:@"MainView"];
    mainV.modalTransitionStyle = UIModalTransitionStyleCrossDissolve;
    [self presentViewController:mainV animated:YES completion:^(void)
     {
         [self.myCache removeAllObjects];//NSCache
         [self.GridView removeFromSuperview]; //collection view
         [self.view removeFromSuperview];

     }];

Seems that memory is still not freed. Is there another way to move to next view and just clear everything before ?

Upvotes: 0

Views: 251

Answers (2)

mithlesh jha
mithlesh jha

Reputation: 343

Even after grid view is removed from superview, it won't be cleared from memory if it's an iVar of your view controller class or a strong property. Try setting GridView to nil after you call [self.GridView removeFromSuperview].

Upvotes: 0

Gabriel
Gabriel

Reputation: 3359

In that code class1 is presenting class2. But class1 is still there, presenting class2, until it does a "dismissViewController:" method.

If you want to go back to mainView from class1. And in the case of class1 being presented by mainView. Then mainView have to do a dismissViewController:

In other case you are stacking a pile of view controllers, one presenting the next one.

The pattern most used in objetive-c is to send a message from class1 to its presenter. A delegation pattern. The presenter then dismiss the viewController.

Upvotes: 0

Related Questions