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
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容