2015-05-19 3 views
0

Я знаю, что есть много вопросов, подобных этому. Я все прочитал. Моя проблема очень проста.Viewcontroller Dealloc Method Never Lets

Я создал одно приложение для просмотра из файла xcode> нового проекта> приложения с одним представлением. Затем я добавил второй диспетчер uiview в раскадровке и новый класс viewcontroller с именем secondViewController. Я перетащил кнопку в main viewcontroller и ctrl + перетащил на secondViewController на раскадровку. Я сделал обратное в secondViewController. И просто добавил dealloc functins с nslog в файлы классов. Я также добавил слабые ссылки на uibuttons

Метод Dealloc для каждого контроллера просмотра никогда не вызывается при изменении вида.

ViewController.m

#import "ViewController.h" 

@interface ViewController() 

@end 

@implementation ViewController 
- (void)viewDidLoad { 
    [super viewDidLoad]; 
    NSLog(@"viewDidLoad 1"); 
     // Do any additional setup after loading the view, typically from a nib. 
} 

- (void)didReceiveMemoryWarning { 
    [super didReceiveMemoryWarning]; 
    // Dispose of any resources that can be recreated. 
} 

- (void)dealloc { 
    NSLog(@"dealloc 1"); 
} 

SeconViewController.m

#import "SecondViewController.h" 

@interface SecondViewController() 

@end 

@implementation SecondViewController 

- (void)viewDidLoad { 
    [super viewDidLoad]; 
    // Do any additional setup after loading the view. 
} 

- (void)didReceiveMemoryWarning { 
    [super didReceiveMemoryWarning]; 
    // Dispose of any resources that can be recreated. 
} 

- (void)dealloc { 
    NSLog(@"dealloc 2"); 

} 
@end 

ARC включена.

Зомби, кажется, отключены по продукту> схема редактирования. Я использую xcode 6.2. При переключении устройств на экран переключается экранная память.

В чем проблема, я не смог найти?

+0

dealloc A-контроллера является только вызывается, когда контроллер представления уволен. Поэтому ваш главный контроллер просмотра никогда не будет освобожден. И если у вас есть два контроллера вида, у вас нет ни одного приложения для просмотра. Как вы можете не касаться первоначального кода, если у вас есть кнопки и два контроллера? Предоставьте соответствующие данные или никто не сможет вам помочь. – rmaddy

+0

Отлично, но в чем вопрос? Если вы покидаете этот контроллер представления (выталкиваете его или отклоняете), и его dealloc не вызывается, у вас есть цикл сохранения и утечка памяти, и вам нужно исправить это. Если вы не хотите говорить о конкретном коде, какую помощь вы ожидаете отсюда? – matt

+0

Извините, я постараюсь изо всех сил. Я редактировал вопрос. @rmaddy –

ответ

1

dealloc вызывает, когда объект (здесь его объект управления представлением) выталкивается из памяти. Но здесь в вашем случае вы должны представлять контроллеры представлений друг от друга, что приводит к вызову только viewwilldisappear и diddisappear.

В раскадровке, если вы хотите, чтобы удалить эти контроллеры просматривать полностью из памяти и должны называть размотать SEGUE

+0

Большое спасибо. Он работает для secondViewController. Есть ли способ заставить его работать для главного контроллера? –

+0

, но почему бы вам это сделать. Потому что в вашем приложении будет представлен один контроллер вида в любое время. Можете ли вы объяснить точный сценарий? – va05

+0

На самом деле мне не нужно. Просто любопытство :) Еще раз спасибо, спасла жизнь –

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