iOS中常见的循环引用

1. addTarget:   ,addObserver:  等所有需要传递self的方法都要注意,尤其是self用作代理的时候要注意。

例如:[[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(reopenSession:) name:kNeedReopenSession object:nil];

2.wkwebview:  [userContentController addScriptMessageHandler:self name:@"backHomeClick_test”];需要调用removeScriptMessageHandlerForName方法,否则会循环引用

使用WebViewJavascriptBridge时,[self.bridge registerHandler:@"closeActivity" handler:^(id data,WVJBResponseCallback responseCallback){},viewDidDisappear时需要调用removeHandler:否则会循环引用

3.UIAlertController的事件里使用alert ,注意要使用__weak typeof(alertController)weakAlert = alertController,否则会循环引用。

4. 代理要用weak修饰,@property(nonatomic,weak)id delegate;否则容易引起循环引用。

6.block里面使用self时,使用  weakself  strongSelf。

7.NStimer的使用时注意销毁。 

 例:-(void)viewDidDisappear:(BOOL)animated{

    [super viewDidDisappear:animated];

    if(![self.navigationController.viewControllers containsObject:self]){

   请在这里销毁timer}}

8.把self加入到NSArray中,也容易引起循环引用

9.A类别中动态添加属性p,如果属性p应用A,容易造成循环引用。

检测循环引可以引入第三方框架:MleaksFinder。

以上为本人项目中遇到的循环引用情况,如果你有循环引用方面的经验,欢迎留言分享。

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

友情链接更多精彩内容