Действительно ли анализатор заслуживает доверия в отношении обнаружения утечек памяти? - PullRequest
1 голос
/ 29 сентября 2011

В моем делегате приложения есть следующий фрагмент кода:

...

@synthesize model = _model;

- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions
{
    ...

    // Allocate the model
    self.model = [[Model alloc] init];

    ...
}

- (void)dealloc
{
    [_model release];
    [super dealloc];
}

...

XCode Analyzer сообщает о потенциальной утечке памяти в строке после выделения модели (она исчезла, когда я добавил оператор autorelease, поэтому я думаю, что он просто перепутал с номера строк). Это действительно утечка памяти или анализатор сбит с толку? В конце концов, релиз выполняется методом dealloc. Так есть ли здесь вероятность утечки памяти и в каких ситуациях?

Если это так, то я думаю, что решение было бы добавить autorelase к распределению.

Ответы [ 3 ]

3 голосов
/ 29 сентября 2011

Это утечка памяти, если свойство определено как retain, поскольку оно имеет счет сохранения 2 - один раз для alloc и один раз при присвоении свойству - но вы освобождаете его только один раз. Xcode запутывается о номерах строк, хотя .

1 голос
/ 29 сентября 2011

Да, это заслуживает доверия!

Если щелкнуть значок с синей стрелкой в ​​строке, где анализатор показывает утечку:

enter image description here

, она будетпредоставить вам более подробную информацию о утечке, точно указав, где она возникла, и в этом случае причину, по которой она указана в следующей строке:

enter image description here

0 голосов
/ 29 сентября 2011

Статический анализатор очень заслуживает доверия.В конце концов, ARC полностью основана на этом.Это должно быть хорошо для того, чтобы программирование iOS5 работало.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...