博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
iOS 控制器的实例 的block循环引用
阅读量:6837 次
发布时间:2019-06-26

本文共 1142 字,大约阅读时间需要 3 分钟。

当变量为控制器的实例时 也会出现循环引用例如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;复制代码

}

转载于:https://juejin.im/post/5a31f19e6fb9a044fd11c73d

你可能感兴趣的文章
快速启动神器 Wox
查看>>
第 34 章 Gnuplot
查看>>
WCF NetTcpBinding Transport安全模式(6) ClientCredentialType证书验证模式---- PeerTrust验证模式...
查看>>
选择HttpHandler还是HttpModule?
查看>>
HTC Desire 金卡制作方法
查看>>
C#高性能大容量SOCKET并发(十):SocketAsyncEventArgs线程模型
查看>>
phpcurl 请求Chunked-Encoded data 遇到的一个问题
查看>>
ASPX页面中不放置Form元素的问题
查看>>
docker~Dockerfile优化程序的部署
查看>>
你可能不需要一个 JavaScript 框架(二)
查看>>
【Android】显示Emoji表情字符
查看>>
C++ Exercises(十八)
查看>>
21.5. 流量控制
查看>>
WSRP调用中的一些问题
查看>>
Android 正则表达式
查看>>
5.22. Spring boot with Cache
查看>>
[裴礼文数学分析中的典型问题与方法习题参考解答]4.3.13
查看>>
string Join
查看>>
flaskr 报错及其修改
查看>>
[唐诗]入朝洛堤步月-上官仪
查看>>