美文网首页
NSNotificationCenter 是否需要remove

NSNotificationCenter 是否需要remove

作者: 寂寞先森666 | 来源:发表于2019-03-26 19:29 被阅读0次

    第一、__unsafe_unretain

    __unsafe_unretain和__weak都能避免retain cycle,但是他们也有一些细微的不同。对于__weak,当释放指针指向的对象时,该对象的指针将转换为nil,这是比较安全的行为。而__unsafe_unretain,正如其名称隐藏的含义,尽管释放指针指向的对象时,该指针将继续指向原来的内存。这将会导致应用crash,所以是unsafe

    第二、通知中心对响应者observer是使用unsafe_unretained修饰

    当响应者释放会出现野指针,如果向野指针发送消息会造成崩溃。在 iOS9 系统之后,[NSNotificationCenter defaultCenter]会在响应者observer调用-dealloc方法的时候执行-removeObserver:方法

    第三、如何证明响应者dealloc时候调用了removeObserver?

    写个NSNotificationCenter的 分类 ,拦截removeObserver ,发现当响应者dealloc时候确实调用removeObserver

    + (void)load {

        Methodorigin =class_getInstanceMethod([selfclass],@selector(removeObserver:));

        Methodcurrent =class_getInstanceMethod([selfclass],@selector(_removeObserver:));

        method_exchangeImplementations(origin, current);

    }

    - (void)_removeObserver:(id)observer {

        NSLog(@"调用移除通知方法: %@", observer);

        //    [self _removeObserver:observer];

    }

    参考:https://www.jianshu.com/p/e3a38b21420c

    相关文章

      网友评论

          本文标题:NSNotificationCenter 是否需要remove

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