block塊中引用成員變量引起內存泄漏問題


使用block要注意循環引用,因此在塊中使用self前先使用__weak修飾生產弱引用

這里記錄另一種情況:沒有使用屬性而是直接使用成員變量的時候

//  私有成員變量
@implementation SmartInfoViewController
{
    UIColor *lightColor;
}

//  在塊中直接使用lightColor會造成retain cycle
self.colBlock = ^(UIColor *col) {
    lightColor = col; 
    // 等價於 self->lightColor = col;
};

解決辦法

//  使用前先生成弱引用 
__weak typeof(self) ws = self;

paint.colBlock = ^(UIColor *col) {
    // 必須在內部__strong強引用
    __strong typeof(ws) ss = ws;
    ss -> lightColor = col;
};

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM