Вам необходимо освободить _allData перед переназначением.Вам также нужно сохранить его при назначении.
РЕДАКТИРОВАТЬ: Включение улучшения Роберта, чтобы избавиться от ненужного NSDictionary.
EDIT2: Поскольку вы возвращаете объект через границу API, его необходимо перенастроить как автоматически выпущенный объект.
- (NSDictionary *)allData
{
NSString *path = [saveAlarm getNSPath];
[_allData release];
_allData = [[NSDictionary dictionaryWithContentsOfFile:path] retain];
return [_allData autorelease];
}
Код, который вы опубликовали, немного странен, поскольку вы создаете свойство allData,сказав ему использовать _allData в качестве ивара (с @synthesize), а затем внедрив пользовательский метод получения, который устанавливает ивар.Если вы объявите свойство только для чтения, вы можете удалить оператор @synthesize.
Если вы используете _allData только внутри этого метода, а не где-либо еще в этом классе, вы можете полностью избавиться от него.Вот гораздо более простая версия, которая делает то же самое:
- (NSDictionary *)allData
{
NSString *path = [saveAlarm getNSPath];
return [NSDictionary dictionaryWithContentsOfFile:path];
}