簡體   English   中英

澄清弱引用和保留周期

[英]Clarification about weak references and a retain cycles

我有以下代碼:

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

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

    }
};

ARC似乎不喜歡[operation hasAcceptableStatusCode],並且我收到以下警告:“在此塊中強烈捕獲'操作'可能會導致保留周期”。

我對參考沒有很多經驗,有什么想法去哪里?

謝謝,
夏嘉曦

塊捕獲(保留)從外部引用的對象。

操作將保留completionBlock,這將保留操作,因此保留周期。

最好的辦法是創建一個對象的弱引用,然后傳入它

AFHTTPRequestOperation * __weak theOperation = operation

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

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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM