Как определить, не была ли выпущена переменная в Objective-C?

#objective-c #ios #memory-leaks

#objective-c #iOS #утечки памяти

Вопрос:

Я удалил несколько выпусков из своего кода, чтобы посмотреть, сможет ли инструмент утечки в xCode уведомить меня о плохом коде:

 ...
UINavigationController *masterNav = [[UINavigationController alloc] initWithRootViewController:master];
UINavigationController *detailNav = [[UINavigationController alloc] initWithRootViewController:detail];
[master release];

splitViewController.viewControllers = [NSArray arrayWithObjects:masterNav, detailNav, nil];
//[masterNav release]; [detailNav release]; commented out
  

Однако я не вижу никаких уведомлений. Это потому, что память, выделенная для таких переменных, слишком мала? Мне нужен инструмент управления памятью на этом этапе, на котором я изучаю objective-C

Спасибо

Ответ №1:

Ваше чрезмерное сохранение (detailNav) еще не является утечкой, потому что на него все еще ссылается splitViewController.ViewControllers. Вот почему инструменты не будут показывать это как утечку.

Инструменты не помечают избыточное сохранение (это невозможно). Только когда ваш объект потерян, т. Е. после того, как все другие объекты, не подвергшиеся утечке, выпустили свои ссылки, инструменты пометят это как утечку.

Ответ №2:

Вы пробовали Product->Analyze использовать Xcode4? Это должно показать вам утечку.

Ответ №3:

перейдите в xcode и выберите проект.Затем нажмите на сборку и запустите .Это приведет к некоторым утечкам памяти