Утечка проблема с initWithContentsOfFile - PullRequest
0 голосов
/ 18 февраля 2010

Мое приложение работает хорошо и выглядит нормально. Но после того, как я запустил его с помощью инструментов, я обнаружил множество утечек. Есть несколько вещей, которые, кажется, не так, как код ниже. У кода действительно есть проблемы? Любое слово будет полезно для меня.

@interface GameData : NSObject
{
    NSDictionary* _data;
    NSDictionary* _localData;
}
@end

@implementation GameData

- (id) init
{
    NSString* dataFilename = [[NSBundle mainBundle]pathForResource:@"GameData" ofType:@"plist"];
    _data = [[NSDictionary alloc]initWithContentsOfFile:dataFilename]; // Leaks 48 bytes

    NSString* localDataFilename = [[NSBundle mainBundle]pathForResource:@"GameData-Local" ofType:@"plist"];
    _localData = [[NSDictionary alloc]initWithContentsOfFile:localDataFilename];

    return self;
}

- (void) dealloc
{
    [_data release];
    [_localData release];

    [super dealloc];
}

@end

1 Ответ

4 голосов
/ 19 февраля 2010

Некоторые операции могут привести к тому, что платформы будут хранить статические структуры данных, которые никогда не освобождаются. Например, реализация -initWithContentsOfFile: может устанавливать некоторые внутренние настройки при первом использовании, которые затем применяются до тех пор, пока приложение не будет закрыто, возможно, из соображений оптимизации производительности. Это не настоящая утечка, но программное обеспечение для обнаружения утечек иногда помечает ее как таковую. Также есть вероятность, что в самой среде есть ошибка, которая вызывает утечку памяти, но это редко, особенно для хорошо известного класса, такого как NSDictionary.

Вы не просачиваетесь в своем коде, насколько я могу судить, это правильно. Если вызывается ваш метод -dealloc (для уверенности добавьте оператор журнала), то вы выполняете свою часть договора, и любая утечка не является вашей ошибкой.

Вероятно, стоит использовать инструмент ObjectAlloc, поскольку он дает вам гораздо лучшее представление о том, какие объекты размещены и находятся вокруг.

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