使用block要註意迴圈引用,因此在塊中使用self前先使用__weak修飾生產弱引用 這裡記錄另一種情況:沒有使用屬性而是直接使用成員變數的時候 解決辦法 ...
使用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; };