iPhone アプリに Core Data を使用しています。私の属性は保持されたプロパティで設定されています。
たとえば、「モノ」エンティティの「数値」属性:
#import <CoreData/CoreData.h>
@interface Thing : NSManagedObject
{
}
@property (nonatomic, retain) NSNumber * number;
@end
@implementation Thing
@dynamic number;
@end
私のコードで Thing オブジェクトを操作するとき、次のように number プロパティを設定しています。
thing.number = [[NSNumber alloc] initWithInteger:1];
ただし、これによりメモリ リークが発生します (新しい NSNumber オブジェクトの保持カウントは、alloc とプロパティ保持により、必要な数よりも 1 つ多くなります)。
これは iPhone OS 用であるため、自分でメモリを管理したいので、自動解放プールを使用しないことを選択しています (これには、パフォーマンスが向上し、最大メモリ使用量が少なくなるという利点もあります)。
私はこのパターンが機能することを知っています (そして、すでにいくつかの SO 投稿で議論されています):
NSNumber *num = [[NSNumber alloc] initWithInteger:1]; thing.number = num; [num release];
このパターンは非常に明確ですが、私は 3 行や一時変数について興奮していません。
これもうまくいくと思います(ただし、SOの投稿では気づきませんでした):
thing.number = [[NSNumber alloc] initWithInteger:1]; [thing.number release];
このパターンはあまり明確ではありませんが、2 行しか必要とせず、一時変数を使用しません。
質問
(自動解放プールを使用せずに) 保持されたプロパティに新しいオブジェクトを割り当てるための他のパターンはありますか? ここでのベストプラクティスは何ですか?