iOS中常見(jiàn)的循環(huán)引用

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),歡迎留言分享。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書(shū)系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

友情鏈接更多精彩內(nèi)容