4

我有以下代碼:澄清關於弱引用和保留週期

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

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

    } 
}; 

ARC似乎並不喜歡[操作hasAcceptableStatusCode],我得到以下警告:「捕獲‘操作’強烈這個區塊很可能會導致保留週期「。

我不是很有經驗的參考,任何想法什麼方式去這裏?

感謝,
夏嘉曦

回答

6

塊捕獲(保留),你從他們的外引用的對象。

操作將保留completionBlock,它將保留操作,因此保留週期。

做的最好的事情是創建一個弱引用的對象,並把它傳遞代替

AFHTTPRequestOperation * __weak theOperation = operation 

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

弱引用是在運行時的安全,所以如果操作已經dealloced你只是將消息發送到零。

+0

有點奇怪,但它做的工作,謝謝:) –