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