3

私はARCを使用しており、1つのメソッドで操作オブジェクトを割り当てています。それはメモリリークを引き起こしますか?はいの場合、どこに設定すればよいnilですか?完了ブロック内または[operation start];?の後

AFHTTPRequestOperation *operation = [[AFHTTPRequestOperation alloc] initWithRequest:request];
[operation setCompletionBlockWithSuccess:^(AFHTTPRequestOperation *operation, id responseObject) {
    // success downloading file
    // Do something
} failure:^(AFHTTPRequestOperation *operation, NSError *error) {
    // error downloading file
    // Do something else
}];

[operation start];
4

2 に答える 2

1

いいえ、この場合、システムがメモリ管理を行い、リークのリスクはありません。

于 2012-10-13T20:07:47.820 に答える
1

漏れなし。大丈夫です。ただし、通常、operationブロック内で参照するとリテイン サイクルが発生します。しかし、その API はこれを予測して、使用可能なコピーを渡しているようです。operationブロックパラメータは安全に参照できると想定できると思います。

通常、ブロック内のブロック所有者を参照する必要がある場合は、保持されていないコピーを宣言し、代わりにそれを参照します...

__unsafe_unretained BlockOwningClass *blockOwnerCopy = blockOwner;
[blockOwner doBlock:^{  NSLog(@"%@", blockOwnerCopy); }];
于 2012-10-13T19:30:15.323 に答える