Я пришел в Objective-C из C ++, поэтому у меня до сих пор иногда возникают проблемы с пониманием управления памятью в Objective-C.У меня возникла следующая проблема - XCode Analyzer говорит мне, что данные объекта * вызывают утечки в коде.
- (void)loadSettings
{
NSString *filePath = [self dataFilePath];
if ([[NSFileManager defaultManager] fileExistsAtPath:filePath])
{
NSData *data = [[NSMutableData alloc]
initWithContentsOfFile:[self dataFilePath]];
NSKeyedUnarchiver *unarchiver = [[NSKeyedUnarchiver alloc]
initForReadingWithData:data];
// object *data is no longer referenced at this point and has a retain count of +1 (object leaked)
AppData *settingsData = [unarchiver decodeObjectForKey:kDataKey];
if (nil != settingsData)
{
customerVoiceActive = settingsData.customerVoice;
}
[unarchiver finishDecoding];
[unarchiver release];
[settingsData release];
}
}
Что сводит меня с ума, так это то, что точно такой же код (кроме именования) прекрасно работает и не вызывает утечек, будучи помещенным в приложение*