【问题标题】:ARC Retain Cycle appears after updating to iOS 6.1更新到 iOS 6.1 后出现 ARC Retain Cycle
【发布时间】:2013-01-17 18:37:20
【问题描述】:

更新到 iOS 6.1 后,我在 AFNetworking 框架的 AFImageRequestOperation.m 和 AFHTTPClient.m 中收到此警告:

在此块中强烈捕获“操作”可能会导致 保留周期

基于this answer,,我可以使用 __weak 变量修复 ARC 中的保留周期。也是这样说的

块将被捕获的对象保留

有人知道怎么解决吗?

谢谢。

【问题讨论】:

  • 我相信这在 AFNetworking 1.1 中已修复
  • 没错,我下载了 1.1.0 并且警告消失了。我正在下载没有最新提交的 Master 分支。谢谢基思。

标签: automatic-ref-counting afnetworking ios6.1


【解决方案1】:

我们很幸运 XCode 4.6 显示警告以避免此问题 可以通过提供弱引用来解决

AFImageRequestOperation *requestOperation = [[AFImageRequestOperation alloc] initWithRequest:urlRequest];

**__weak AFImageRequestOperation *tempRequestOperation = requestOperation;**

[requestOperation setCompletionBlockWithSuccess:^(AFHTTPRequestOperation *operation, id responseObject) {
    if (success) {
        UIImage *image = responseObject;
        if (imageProcessingBlock) {
            dispatch_async(image_request_operation_processing_queue(), ^(void) {
                UIImage *processedImage = imageProcessingBlock(image);

                dispatch_async(**tempRequestOperation**.successCallbackQueue ?: dispatch_get_main_queue(), ^(void) {
                    success(operation.request, operation.response, processedImage);
                });
            });
        } else {
            success(operation.request, operation.response, image);
        }
    }
} failure:^(AFHTTPRequestOperation *operation, NSError *error) {
    if (failure) {
        failure(operation.request, operation.response, error);
    }
}];

【讨论】:

  • 嗨 Sunny,我做了同样的事情,但警告仍然存在。我什至下载了包含所有新提交的最新 AFNetworking 框架,因为有人告诉我新提交在不久前解决了这些问题,但警告仍然存在。警告在这里:AFHTTPCliend.m line #564 NSMutableArray *mutableOperations = [NSMutableArray array];和 AFImageRequestOperation.m 第 85 行 dispatch_async(operation.successCallbackQueue ?: dispatch_get_main_queue(), ^(void) { success(operation.request, operation.response, processesImage); });顺便说一句,我的应用程序没有崩溃或显示任何问题。
  • 我实现了上述解决方案,它对我有用。那么我们是否必须下载我提供的最新版本或解决方案才能工作。
【解决方案2】:

好的,问题就在这里。我一直在从 GitHub 下载Master branch,现在我尝试下载 AFNetworking from here(版本 1.1.0),它不再向我显示警告。

我不明白为什么我下载时最新的提交没有包含在 master 分支中,但很明显他们已经解决了这些强 refs 块警告。

请务必查看website 以查看最新发布的版本或从 GitHub 同步最新提交 :)(它没有在我的 iOS 6.0 应用程序中显示任何内容,但 Xcode 4.6 只是将它们显示出来)

【讨论】:

    猜你喜欢
    • 2019-04-02
    • 2013-03-20
    • 1970-01-01
    • 1970-01-01
    • 2013-01-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多