0

私はIOSアプリケーションを開発しています。XCode インスツルメンツで分析しました。autorelease を記述しないと、「潜在的なメモリ リーク」メッセージが表示されます。それは以下のコード ブロックのエラーですか。よくわかりませんでした。

//TransferList.h
@property (nonatomic,retain) WebServiceAPI *webApi;


//TransferList.m
@implementation TransferList

@synthesize webApi;

- (void)viewDidLoad
{
    [super viewDidLoad];
    self.webApi = [[[WebServiceAPI alloc] init] autorelease];
}

- (void)dealloc
{    

    [webApi release];
    [super dealloc];
}
4

1 に答える 1

3

これが MRC でコンパイルされている場合 (そして明らかにそうです)、autoreleaseメモリ リークが発生しません。その通りです。

allocオブジェクトの所有権が必要だと言います。所有権も主張
するプロパティへの割り当て(プロパティによる) では、プロパティを解放しています (プロパティはオブジェクトを所有しなくなります)。retain
dealloc

がない場合、 はオブジェクトの所有権を失うことはなくautorelease、オブジェクトの割り当てが解除されないため、メモリ リークが発生します。viewDidLoad

- (void)viewDidLoad {
    [super viewDidLoad];

    //create the object and get the ownership
    WebServiceAPI *api = [[WebServiceAPI alloc] init];

    //let our property also own this object
    self.webApi = api;

    // I don't want to own the object anymore in this method
    // (of course, using autorelease is simpler)
    [api release];
}

- (void)dealloc {    
    //our property doesn't want to own the object any more
    [webApi release];
    [super dealloc];
}
于 2013-11-14T13:14:27.410 に答える