iOS 控制器的实例 的block循环引用

当变量为控制器的实例时 也会出现循环引用例如abc
@interface ViewController ()<UITableViewDelegate,UITableViewDataSource>
{
UITableView *_tableView;
NSString *abc;
}

1.如果此时的block不属于self 则直接赋值(在VC在dealloc前 必须要销毁block回调 否则内存泄漏) 例如添加在keywindow上的View:

  • (void)viewDidLoad {
    [super viewDidLoad];

    AView *view = [[AView alloc] init];
    view.frame = CGRectMake(100, 100, 100, 100);
    view.backgroundColor = [UIColor redColor];
    view.abc = ^(NSString *aaa){

      abc = aaa;
    

    };
    AppDelegate *delegate = (AppDelegate *)[UIApplication sharedApplication].delegate;
    UIWindow *keywindow = delegate.window;
    [keywindow addSubview:view];
    [view removeFromSuperview];

//这样写block也不属于self
void(^foo)(NSStringstr)= ^(NSString str){

    abc = str;
};
foo(@"1111");

}

2.如果此时的block属于self 则要写方法赋值赋值 例如添加在self.view上的View:

  • (void)viewDidLoad {
    [super viewDidLoad];

    __weak typeof(self) weakSelf = self;
    AView *view = [[AView alloc] init];
    view.frame = CGRectMake(100, 100, 100, 100);
    view.backgroundColor = [UIColor redColor];
    view.abc = ^(NSString *aaa){
    [weakSelf setAbc:aaa];
    };
    [self.view addSubview:view];
    }

-(void)setAbc:(NSString *)a{

abc = a;

}

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

  • *7月8日上午 N:Block :跟一个函数块差不多,会对里面所有的内容的引用计数+1,想要解决就用__block...
    炙冰阅读 2,731评论 1 14
  • *面试心声:其实这些题本人都没怎么背,但是在上海 两周半 面了大约10家 收到差不多3个offer,总结起来就是把...
    Dove_iOS阅读 27,622评论 30 472
  • 1、截取字符串”20 | http://www.baidu.com”中,”|”字符前面和后面的数据,分别输出它们 ...
    强子ly阅读 3,136评论 8 46
  • iOS开发系列--网络开发 概览 大部分应用程序都或多或少会牵扯到网络开发,例如说新浪微博、微信等,这些应用本身可...
    lichengjin阅读 4,039评论 2 7
  • 设计模式是什么? 你知道哪些设计模式,并简要叙述? 设计模式是一种编码经验,就是用比较成熟的逻辑去处理某一种类型的...
    Jt_Self阅读 835评论 0 4

友情链接更多精彩内容