проблема утечки памяти - PullRequest
2 голосов
/ 25 марта 2011

Я новичок в iphone dev и в решении проблем с памятью.Я учусь, но некоторые вещи остаются для меня загадочными.

В следующем случае анализатор утечек "Instruments" сообщает, что у меня есть утечка в настройке databasePath.Я не могу понять, почему.

// databaseName and databasePath are properties of my class.
databaseName = [[NSString alloc] initWithString:@"sqlDbName.sql"];

NSArray *documentPaths = [[NSArray alloc] initWithArray:NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES)];

NSString *documentsDir = [[NSString alloc] initWithString:[documentPaths objectAtIndex:0]];

// The problem is here : 
databasePath = [[NSString alloc] initWithString:[documentsDir stringByAppendingPathComponent:databaseName]];

[documentPaths release];
[documentsDir release];

Я освобождаю databaseName и databasePath позже в dealloc.

Ваша помощь будет очень признательна!

Ответы [ 2 ]

5 голосов
/ 25 марта 2011

Есть ли вероятность того, что этот код выполняется более одного раза. Вы выпустили databasePath в dealloc. Если этот код будет выполнен более одного раза, то databasePath утечет для любого последующего выполнения.

1 голос
/ 25 марта 2011

Если вы хотите, чтобы этот метод вызывался дважды, вы можете сделать:

...
[databasePath release];
databasePath = [[NSString alloc] initWithString:[documentsDir stringByAppendingPathComponent:databaseName]];
....

Если databasePath изначально был равен нулю, то вызов [databasePath release]; ничего не сделает.

Если databasePath уже был инициализирован, он освободит старый экземпляр перед созданием нового.

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