2012-04-03 10 views
0

Ich habe dieses Problem beim Testen meiner MCQ Game App festgestellt.So löschen Sie den Speicher des vorherigen ViewControllers

I ARC & Storyboard individuelle segue bin mit und [self performSegueWithIdentifier:@"VC" sender:self];ViewController1-ViewController2 zu schieben, aber sehr selten zurück ViewController1 aufgrund des Naturals der App Knalle, sich darauf, von Frage bewegt zu hinterfragen. Die App wird nach mehrmaligem Drücken sehr, sehr träge. Was ist der beste Weg, um das Problem zu lösen?

Individuelle segue:

-(void)perform { 
    UIViewController *sourceVC = (UIViewController *) self.sourceViewController; 
    UIViewController *destinationVC = (UIViewController *) self.destinationViewController; 

    [UIView transitionWithView:sourceVC.navigationController.view duration:0.5 
         options:UIViewAnimationOptionTransitionCrossDissolve 
        animations:^{ 
         [sourceVC.navigationController pushViewController:destinationVC animated:NO]; 
              } 
        completion:^(BOOL completed) 
        {  

         //[sourceVC.navigationController pushViewController:destinationVC animated:NO]; 
        }      
        ]; 



} 

Antwort

1

änderte ich die benutzerdefinierte segue von Push-Controller Namen auf meiner Ansicht nach Pop, und es funktioniert :)

-(void)perform { 
    UIViewController *sourceVC = (UIViewController *) self.sourceViewController; 
    //UIViewController *destinationVC = (UIViewController *) self.destinationViewController; 

    NSInteger index = -1; 
    NSArray* arr = [[NSArray alloc] initWithArray:sourceVC.navigationController.viewControllers]; 
    for(int i=0 ; i<[arr count] ; i++) 
    { 
     if([[arr objectAtIndex:i] isKindOfClass:NSClassFromString(@"mainViewController")]) 
     { 
      index = i; 
     }  
    }  

    [UIView transitionWithView:sourceVC.navigationController.view duration:0.5 
         options:UIViewAnimationOptionTransitionCrossDissolve 
        animations:^{ 

         [sourceVC.navigationController popToViewController:[arr objectAtIndex:index] animated:NO]; 

        } 
        completion:^(BOOL completed) 
    {  

     //[sourceVC.navigationController pushViewController:destinationVC animated:NO]; 
    }      
    ]; 



} 
1

Ich vermute, es gibt eine starke Zyklus Referenz geht. Führen Sie Leaks aus, um sicherzustellen, dass der vorherige View-Controller keine starke Referenz hat, nachdem Sie den neuen Push gedrückt haben.

+0

hallo Oscar, i dun keine Lecks haben aber meine Zuteilung halten zu erhöhen .... .von 1 MB bis 4 MB nach sagen 10pushs – Desmond

+0

Nun, die Sache ist, dass, weil Sie ARC verwenden, eigentlich kein Leck ist, es ist nur der vorherige VC hat eine starke Referenz, was bedeutet, dass es nicht freigegeben wird, wenn Sie einen neuen Wert zuweisen dazu, oder Sie setzen den Zeiger auf Null. –

+0

Ich nenne diese als "semantische Lecks". Da OP jedoch pushViewController verwendet, stelle ich mir vor, dass sie alle in einem Navigations-Controller-Stack gespeichert werden. – borrrden

Verwandte Themen