2013-12-11 2 views
0

Я практикуюсь над тем, как работает TabViewcontroller. Теперь у меня есть 2 подкласса UIViewcontroller. Один из них - HypnosisViewController, другой - TimeViewController. Что я хотел проверить, так это то, как - (void) viewDidLoad работает, когда симулятор IOS получает предупреждение о памяти. И я сделалПредупреждение о неисправности не работает должным образом

  1. Собрал и запустил приложение
  2. Консоль сказал «HypnosisViewcontroller загружен свое мнение.»
  3. Переключил другую вкладку (TimeViewController)
  4. Пила сообщение в консоли. В нем говорится: «TabViewcontroller загрузил свой вид»
  5. Была ли команда предупреждения о симуляторе памяти в симуляторе IOS
  6. Консоль «Предупреждение о сохранении памяти HypnoTime».
  7. Переключился обратно в HypnosisViewcontroller, чтобы увидеть, говорит ли консоль: «HypnosisViewcontroller загрузил его представление». еще раз.

Таким образом, проблема здесь в HypnosisViewcontroller не уничтожается и не создается снова. (Потому что я не могу видеть сообщение журнала, когда я возвращаюсь к HypnosisViewcontroller.) Однако я наклонил представление, которое не на экране, должно быть уничтожено во время предупреждения о памяти.

Я что-то пропустил? Заранее спасибо!

HypnosisViewController.m:

#import "HypnosisViewController.h" 
#import "HypnosisView.h" 

@implementation HypnosisViewController 

-(void)loadView 
{ 
    //Create a view 

    CGRect frame = [[UIScreen mainScreen] bounds]; 
    HypnosisView *v = [[HypnosisView alloc] initWithFrame:frame]; 

    // Set it as *the* view of this view controller 
    [self setView:v]; 


} 

-(id)initWithNibName:(NSString *)nibName bundle:(NSBundle *)bundle 
{ 

    self = [super initWithNibName:nil 
          bundle:nil]; 

    if(self){ 
     //Get the tab bar item 
     UITabBarItem *tbi = [self tabBarItem]; 

     //Give it a label 
     [tbi setTitle:@"Hypnosis"]; 

     //Create a UIImage from a file 
     //This will use [email protected] on retina display devices 
     UIImage *i = [UIImage imageNamed:@"Hypno.png"]; 

     // Put that image on the tab bar item 
     [tbi setImage:i]; 

    } 
    return self; 

} 

-(void)viewDidLoad 
{ 

    // Always call the super implmetaion of viewDidload 
    [super viewDidLoad]; 
    NSLog(@"HypnosisViewcontroller loaded its view"); 


} 

@end 

TimeViewController.m:

#import "TimeViewController.h" 

@implementation TimeViewController 

-(IBAction)showCurrentTime:(id)sender 
{ 
    NSDate *now = [NSDate date]; 

    NSDateFormatter *formatter = [[NSDateFormatter alloc] init]; 
    [formatter setTimeStyle:NSDateFormatterMediumStyle]; 


    [timeLabel setText:[formatter stringFromDate:now]]; 
    [timeLabel2 setText:[formatter stringFromDate:now]]; 

} 

-(id)initWithNibName:(NSString *)nibName bundle:(NSBundle *)bundle 
{ 
    // Call the superclass's designated initializer 
    self = [super initWithNibName:nil 
          bundle:nil]; 

    //Get a pointer to the application bundle object 
    // NSBundle *appBundle = [NSBundle mainBundle]; 

    // self = [super initWithNibName:@"TimeViewController" 
          //bundle:appBundle]; 

    if(self){ 
     //Get the tab bar item 
     UITabBarItem *tbi = [self tabBarItem]; 

     //Give it a label 
     [tbi setTitle:@"Time"]; 


     //Create a UIImage from a file 
     //This will use [email protected] on retina display devices 
     UIImage *i = [UIImage imageNamed:@"Time.png"]; 

     // Put that image on the tab bar item 
     [tbi setImage:i]; 




    } 
    return self; 
} 

-(void)viewDidLoad 
{ 

    // Always call the super implmetaion of viewDidload 
    [super viewDidLoad]; 
    NSLog(@"TimeViewcontroller loaded its view"); 

    // [[self view] setBackgroundColor:[UIColor greenColor]]; 


} 

@end 

enter image description hereenter image description here

ответ

0

Он работает должным образом. И HypnosisViewcontroller был уничтожен и создан снова, потому что viewDidLoad будет вызываться только при запуске всех видов. Итак, здесь вы снова видите сообщение журнала, когда вы переключаетесь обратно на HypnosisViewcontroller, которые представляют, что HypnosisViewcontroller был удален из памяти и инициирован снова. Вы можете попробовать переключиться между этими двумя контроллерами представлений без имитации предупреждения о памяти, и вы увидите сообщение журнала только один раз.

+0

@: Эрик Цюань Спасибо за ответ! О, я забыл добавить что-то важное. Я не могу видеть сообщение журнала, когда я возвращаюсь к HypnosisViewcontroller. – Tosh

+0

ОК, поэтому вы имеете в виду, когда вы переключаетесь обратно на 'HypnosisViewcontroller' после того, как вы имитировали предупреждение о памяти. Сообщение не отображается –

+0

Да, это так! – Tosh

1

Предупреждения о памяти не приводят к тому, что контроллеры больше не смогут уничтожать или выгружать их виды.

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