iOS-掉進(jìn)了block的坑

本文不是技術(shù)向的文章,僅記錄小弟我在開發(fā)中遇到的各種坑...


背景

小弟我在自己寫的工具類中經(jīng)常用block傳數(shù)據(jù),而工具類沒有持有block。
直接在block中用self去調(diào)方法,一直沒出現(xiàn)循環(huán)引用的問題,直到我用了MJRefresh...

當(dāng)時(shí)的代碼是這樣的

self.tableView.mj_footer = [MJRefreshAutoNormalFooter footerWithRefreshingBlock:^{
    [self doSomething];
}];

在離開VC的時(shí)候發(fā)現(xiàn)dealloc沒有被調(diào)用,就開始排查問題出在哪里。
傻傻地排查了半個(gè)多小時(shí)才想起來(lái)block會(huì)有循環(huán)引用問題...

將代碼改成了這樣就好了

__weak typeof(self) weakSelf = self;
self.tableView.mj_footer = [MJRefreshAutoNormalFooter footerWithRefreshingBlock:^{
    [weakSelf doSomething];
}];

使用UIAlertController也要注意循環(huán)引用的問題

下面這段代碼會(huì)導(dǎo)致UIAlertController無(wú)法釋放

UIAlertController *alert = [UIAlertController alertControllerWithTitle:@"請(qǐng)輸入充值金額" message:nil preferredStyle:UIAlertControllerStyleAlert];

UIAlertAction *yesAction = [UIAlertAction actionWithTitle:@"確定" style:UIAlertActionStyleDefault handler:^(UIAlertAction * _Nonnull action) {
    NSString *money = alert.textFields[0].text;
    ...
}];
UIAlertAction *noAction = [UIAlertAction actionWithTitle:@"取消" style:UIAlertActionStyleCancel handler:nil];

[alert addAction:yesAction];
[alert addAction:noAction];
[alert addTextFieldWithConfigurationHandler:^(UITextField * _Nonnull textField) {
    textField.keyboardType = UIKeyboardTypeNumberPad;
}];

[self presentViewController:alert animated:YES completion:nil];

當(dāng)UIAlertController加上TextField的時(shí)候,要注意獲取TextField的內(nèi)容時(shí)需要用weakAlert去獲取。

解決方法

在alert創(chuàng)建后聲明weakAlert
__weak typeof(alert) weakAlert = alert;
將yesAction的block中的這段代碼
NSString *money = alert.textFields[0].text;
改成
NSString *money = weakAlert.textFields[0].text;
就可以解決循環(huá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)書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

  • { 11、核心動(dòng)畫 需要簽協(xié)議,但是系統(tǒng)幫簽好 一、CABasicAnimation 1、創(chuàng)建基礎(chǔ)動(dòng)畫對(duì)象 CAB...
    CYC666閱讀 1,703評(píng)論 2 4
  • *7月8日上午 N:Block :跟一個(gè)函數(shù)塊差不多,會(huì)對(duì)里面所有的內(nèi)容的引用計(jì)數(shù)+1,想要解決就用__block...
    炙冰閱讀 2,736評(píng)論 1 14
  • 有時(shí)候突發(fā)奇想的一次旅途,只因?yàn)橹暗拇掖乙黄常茨鼙M興而游,我想七里山塘對(duì)我而言就是這樣一個(gè)地方,某年的深秋時(shí)節(jié)...
    拾味閑游閱讀 857評(píng)論 0 0
  • 最近一段時(shí)間,由于自己給自己的加壓和找事做,每天的工作時(shí)間安排的滿滿的。從早到晚按部就班執(zhí)行下來(lái)居然再也沒有了虛度...
    墨鳴齊妙閱讀 1,575評(píng)論 0 1
  • 外面的天氣灰蒙蒙的,整個(gè)人的心情也隨之變得不好起來(lái)! 不知為何最近身邊發(fā)生了很多事情,都是充滿了負(fù)能量的。有人跳樓...
    自由苦澀閱讀 356評(píng)論 0 0

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