3

我正在使用 ARC,在一种方法中我分配了一个操作对象。这会导致内存泄漏吗?如果是,我应该在哪里设置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

没有泄漏。没关系。但是,通常,在块内引用operation会导致保留循环。但看起来 API 已经为您预料到了这一点并传递了一个可用的副本。我想您可以假设operationblock 参数可以安全引用。

通常,如果您需要在块中引用块所有者,您将声明一个未保留的副本并改为引用它...

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

不,在这种情况下,系统会为您处理内存管理,没有任何泄漏的风险。

于 2012-10-13T20:07:47.820 回答