美文网首页
iOS 避免循环引用

iOS 避免循环引用

作者: _YZG_ | 来源:发表于2017-12-05 17:56 被阅读170次

一、block引发的循环引用
1、在block中使用对自身对象的弱引用来替换self

__weak typeof(self) weakSelf = self;

[objectB setCallbackBlock:^{

    [weakSelf excuBlock];

}];

2、如果在block使用了成员变量,也要使用其弱引用,以 _dataSource为例:

__weak typeof(_dataSource) weakDataSource = _dataSource;

二、强引用的delegate引发的循环引用

对代理使用弱引用

@property (nonatomic, weak) id<WZDelegate> delegate;

三、使用了NSTimer没有销毁

当我们使用NSTimer的方法

self.timer = [NSTimer scheduledTimerWithTimeInterval:1.0 target:self selector:@selector(timerAction) userInfo:nil repeats:YES];
[[NSRunLoop mainRunLoop]addTimer:self.timer forMode:NSRunLoopCommonModes];

时,定时器对象会对它的target(即self:当前控制器)持有强引用,如果定时器不销毁,则控制器无法释放。

解决方法:

- (void)viewWillDisappear:(BOOL)animated或者- (void)viewDidDisappear:(BOOL)animated或者其他确定离开当前控制器的方法中销毁定时器。

- (void)viewDidDisappear:(BOOL)animated {
    [super viewDidDisappear:animated];
    if (self.timer != nil) {
        [self.timer invalidate];
        self.timer = nil;
    }
}

相关文章

  • iOS 避免循环引用

    一、block引发的循环引用1、在block中使用对自身对象的弱引用来替换self 2、如果在block使用了成员...

  • ios 避免循环引用

    类似网络请求的情况下会导致循环引用,但是如果网络请求的对象是局部变量,就必须用self,不能用weakSelf,否...

  • iOS 避免循环引用【译】

    今天看文章发现一片关于Retain Cycle的老生常谈的问题,但是作者从开发常见场景的代理和Block分析了原因...

  • iOS 避免循环引用【译】

    今天看文章发现一片关于Retain Cycle的老生常谈的问题,但是作者从开发常见场景的代理和Block分析了原因...

  • weak-strong dance探究

    循环引用 循环引用是iOS开发常见的问题,虽然现在普遍是ARC工程,但是这个问题仍然无可避免。一般都是两个强引用对...

  • __block 和__ weak 的区别

    1:在 block 下循环引用的问题.○ __block 本身并不能避免循环引用,避免循环引用需要在block内部...

  • __block与__weak的真正区别

    block下循环引用的问题 __block本身并不能避免循环引用,避免循环引用需要在block内部把__block...

  • __block和__weak修饰符的区别

    block下循环引用的问题 __block本身并不能避免循环引用,避免循环引用需要在block内部把__block...

  • __block与__weak的区别

    block下循环引用的问题 __block本身并不能避免循环引用,避免循环引用需要在block内部把__block...

  • iOS闭包循环引用精讲

    iOS闭包循环引用精讲 iOS闭包循环引用精讲

网友评论

      本文标题:iOS 避免循环引用

      本文链接:https://www.haomeiwen.com/subject/qeiivxtx.html