iphone - 这是 ARC 下的泄漏吗?

标签 iphone objective-c ios cocoa automatic-ref-counting

我正在使用 ARC,并且在一个方法中我分配了一个操作对象。这会导致内存泄漏吗?如果是,我应该在哪里将它设置为 nil?在完成 block 内或 [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];

最佳答案

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

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

__unsafe_unretained BlockOwningClass *blockOwnerCopy = blockOwner;
[blockOwner doBlock:^{  NSLog(@"%@", blockOwnerCopy); }];

关于iphone - 这是 ARC 下的泄漏吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12876052/

相关文章:

ios - callkit来电语音问题

ios - 以编程方式展开 segue

iphone - 在 iPhone 中查找当前时间

iphone - 如何在 iPhone 或 iPad 上将图像显示为应用程序角标(Badge)?

ios - Callkit 回拨按钮不起作用

ios - 如何使用 faSTLane 和 circleci 将 ipa 文件上传到 Dropbox?

ios - Today Widget 扩展的问题

ios - Storyboard预览不同于模拟器

ios - 自定义字体显示在 IB 中但不显示在设备上

ios - 无法在自定义 UIViewController 中分配自定义 UITableViewCell