1. addTarget: ? ,addObserver: ?等所有需要傳遞self的方法都要注意,尤其是self用作代理的時(shí)候要注意。
例如:[[NSNotificationCenter defaultCenter] addObserver:self?selector:@selector(reopenSession:) name:kNeedReopenSession object:nil];
2.wkwebview:? [userContentController addScriptMessageHandler:self name:@"backHomeClick_test”];需要調(diào)用removeScriptMessageHandlerForName方法,否則會(huì)循環(huán)引用
使用WebViewJavascriptBridge時(shí),[self.bridge registerHandler:@"closeActivity" handler:^(id data,WVJBResponseCallback responseCallback){},viewDidDisappear時(shí)需要調(diào)用removeHandler:否則會(huì)循環(huán)引用
3.UIAlertController的事件里使用alert ,注意要使用__weak typeof(alertController)weakAlert = alertController,否則會(huì)循環(huán)引用。
4.?代理要用weak修飾,@property(nonatomic,weak)id?delegate;否則容易引起循環(huán)引用。
6.block里面使用self時(shí),使用 ?weakself? strongSelf。
7.NStimer的使用時(shí)注意銷(xiāo)毀。?
?例:-(void)viewDidDisappear:(BOOL)animated{
? ? [super viewDidDisappear:animated];
? ? if(![self.navigationController.viewControllers containsObject:self]){
? ?請(qǐng)?jiān)谶@里銷(xiāo)毀timer}}
8.把self加入到NSArray中,也容易引起循環(huán)引用
9.A類(lèi)別中動(dòng)態(tài)添加屬性p,如果屬性p應(yīng)用A,容易造成循環(huán)引用。
檢測(cè)循環(huán)引可以引入第三方框架:MleaksFinder。
以上為本人項(xiàng)目中遇到的循環(huán)引用情況,如果你有循環(huán)引用方面的經(jīng)驗(yàn),歡迎留言分享。