Я использую Core Data для своего приложения для iPhone. Мои атрибуты установлены с сохраненными свойствами.
Например, атрибут «число» в сущности «Вещь»:
#import <CoreData/CoreData.h>
@interface Thing : NSManagedObject
{
}
@property (nonatomic, retain) NSNumber * number;
@end
@implementation Thing
@dynamic number;
@end
При работе с объектами Thing в моем коде я устанавливал свойство числа следующим образом:
thing.number = [[NSNumber alloc] initWithInteger:1];
Однако это приводит к утечке памяти (у нового объекта NSNumber число сохранений на единицу больше, чем нужно, из-за сохранения свойства alloc plus).
Поскольку это для iPhone OS, я хотел бы сам управлять памятью, поэтому я предпочитаю не использовать пулы автоматического освобождения (что также дает более высокую производительность и меньшее максимальное использование памяти).
Я знаю, что этот шаблон работает (и он уже обсуждался в нескольких сообщениях SO):
NSNumber *num = [[NSNumber alloc] initWithInteger:1]; thing.number = num; [num release];
Этот шаблон очень ясен, но я не в восторге от трех строк или временной переменной.
Я думаю, что это тоже сработает (но я не заметил этого ни в каких сообщениях SO):
thing.number = [[NSNumber alloc] initWithInteger:1]; [thing.number release];
Этот шаблон менее ясен, но требует только двух строк и не использует временную переменную.
Вопрос
Существуют ли другие шаблоны для назначения новых объектов сохраненным свойствам (без использования пулов автоматического освобождения)? Какова лучшая практика здесь?