block的使用

一個對象中強引用了block,在block中又強引用了該對象,就會發生循環引用。
1、變量在block中使用

    __block int a = 0;
    NSLog(@"1###%p", &a);         //棧區
    void (^foo)(void) = ^{
        a = 1;
        NSLog(@"2###%p", &a);    //堆區
    };
    foo();
    NSLog(@"3###%p", &a);         //堆區

2017-08-08 10:59:24.661 animateProject[12371:155504] 1###0x7fff5cfa0a18
2017-08-08 10:59:24.661 animateProject[12371:155504] 2###0x600000033098
2017-08-08 10:59:24.661 animateProject[12371:155504] 3###0x600000033098

2、對象在Block使用

#define WS(weakS,obj)  __weak __typeof(&*obj)weakS = obj;
id __weak weakSelf = self;
id __block weakSelf = self;
__weak __typeof(&*self)weakSelf = self
最后編輯于
?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。

推薦閱讀更多精彩內容