カスタム オブジェクトをインスタンス変数に割り当てたい。
コードは次のとおりです。
- MyController.h/.m
#import "CustomData.h"
@interface MyViewController : NSViewController
@property (retain) CustomData* theData;
- (void)aRandomMethod;
@end
@implementation MyViewController
@synthetize theData;
- (void)aRandomMethod {
NSData* rawData = [someOtherObject someOtherMethod];
// option 1
self.theData = [[CustomData alloc] initWithData:rawData];
// option 2
CustomData* _theData = [[Custom alloc] initWithData:rawData];
// option 3
self.theData = [[[CustomData alloc] initWithData:rawData] autorelease];
// option 4
theData = [[CustomData alloc] initWithData:rawData];
// ... later code calls some methods on theData or _theData, not useful here.
}
@end
Xcode で Analyze 機能を実行すると、オプション 1 と 2 については "leaked object not referenced later..." が存在するが、オプション 3 と 4 については存在しないことがautorelease
わかります。セッター。autorelease
メソッドで所有するオブジェクトを返すときに使用する必要があることはわかっています。
それぞれの選択肢について、なぜそれが間違っているのか正しいのか説明していただけますか? ありがとう。