在block内直接访问成员变量

1.在block内直接访问成员变量,会造成循环引用.

解决办法:

在blcok外部 __weak typeof(self)weakSelf = self;

在block内部__Strong typeof(weakSelf)strongSelf = weakSelf;

访问成员变量的方法

strongSelf->***;

在blcok内部修改值以后打印地址,发现地址发生了变化.

例子:


__weak typeof(self)weakSelf = self;
self.testBlock= ^{

    __strongtypeof(weakSelf) strongSelf = weakSelf;

    strongSelf.p.name=@"wang";

    strongSelf->_maxIndex=@"ok";/// 注意修改的时候地址发生了变化

    NSLog(@"_maxIndex == %p", strongSelf->_maxIndex);

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

推荐阅读更多精彩内容

  • 所有的Block里面的self必须要weak一下? 很显然答案不都是,有些情况下是可以直接使用self的,比如调用...
    恋空K阅读 3,975评论 0 3
  • assign vs weak assign适用于基本数据类型,weak是适用于NSObject对象,并且是一个弱引...
    IreneWu阅读 4,104评论 0 2
  • 在介绍Block之前通过一个简单的应用场景认识下Block 场景描述如下:TableView上面有多个Custom...
    黑_白_灰阅读 5,224评论 4 29
  • #C语言内存分配 Objective-C从名字来看就可以知道是一门超C语言,所以了解C语言的内存模型对于理解Obj...
    吾是小马哥阅读 5,245评论 0 10
  • 把网上的一些结合自己面试时遇到的面试题总结了一下,以后有新的还会再加进来。 1. OC 的理解与特性 OC 作为一...
    AlaricMurray阅读 7,374评论 0 20