今天在重构公司以前的代码时,由于公司的需求,当从一个当前页面退出时,要终止该页面的所有网络请求。于是我在dealloc中添加了取消网络请求的方法,但在实际的操作中却发现,dealloc方法在退出页面时被没有被调用,而是等到了网络请求结束后才会调用。然后我想到了应该是网络请求中block的循环引用。最后我发现公司以前的对象都是实例变量,也就是下划线的这种形式。比如:
1 | @interface TestVC (){ |
这就导致了循环引用的问题。然后我就把实例变量都改成了属性的形式,再加上了
1 | __weak typeof(self) weakSelf = self; |
解决了问题,然后我在想能不能就用实例变量来解决这个问题,然后我在网上查了方法,找到了可行的办法,如下:
1 | -(void)test{ |