我使用ARC的時候在一個方法中分配操作對象。這樣會不會內存洩露?這樣的話怎麼設置nil?在一個塊內設置還是在[operation start];之後?
AFHTTPRequestOperation *operation = [[AFHTTPRequestOperation alloc] initWithRequest:request];
[operation setCompletionBlockWithSuccess:^(AFHTTPRequestOperation *operation, id responseObject) {
// 下載文件成功
// 動作
} failure:^(AFHTTPRequestOperation *operation, NSError *error) {
// 下載文件失敗
// 動作
}];
[operation start];
我知道了,不會洩露。不過有時在一個塊內引用operation會引起 retain cycle。不過API已經預估了並且傳遞了一個可用副本。因此可以假定操作塊是安全的引用。
如果在block內引用,聲明 unretained 副本。
__unsafe_unretainedBlockOwningClass *blockOwnerCopy= blockOwner;[blockOwner doBlock:^{ NSLog(@"%@", blockOwnerCopy); }];