【问题标题】:Clarification about weak references and a retain cycles关于弱引用和保留周期的说明
【发布时间】:2012-01-02 10:28:41
【问题描述】:

我有以下代码:

AFHTTPRequestOperation *operation = [[AFHTTPRequestOperation alloc] initWithRequest: request];

operation.completionBlock = ^{
    if([operation hasAcceptableStatusCode]){

    }
};

ARC 似乎不喜欢 [操作 hasAcceptableStatusCode],并且我收到以下警告:“在此块中强烈捕获 '操作' 可能会导致保留周期”。

我对引用不是很有经验,知道这里有什么方法吗?

谢谢,

【问题讨论】:

    标签: iphone ios automatic-ref-counting weak-references afnetworking


    【解决方案1】:

    块捕获(保留)您从外部引用的对象。

    操作将保留completionBlock,它将保留操作,因此保留周期。

    最好的办法是创建一个对该对象的弱引用并将其传入

    AFHTTPRequestOperation * __weak theOperation = operation
    
    operation.completionBlock = ^{
        if (theOperation) {
            return;
        }
    };
    

    弱引用在运行时是安全的,因此如果操作已被解除分配,您只需向 nil 发送消息。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2015-09-25
      • 1970-01-01
      • 2018-02-26
      • 1970-01-01
      • 1970-01-01
      • 2018-07-02
      • 2015-05-20
      相关资源
      最近更新 更多