iOS 控制器的實例 的block循環(huán)引用

當變量為控制器的實例時 也會出現(xiàn)循環(huán)引用例如abc
@interface ViewController ()<UITableViewDelegate,UITableViewDataSource>
{
UITableView *_tableView;
NSString *abc;
}

1.如果此時的block不屬于self 則直接賦值(在VC在dealloc前 必須要銷毀block回調(diào) 否則內(nèi)存泄漏) 例如添加在keywindow上的View:

  • (void)viewDidLoad {
    [super viewDidLoad];

    AView *view = [[AView alloc] init];
    view.frame = CGRectMake(100, 100, 100, 100);
    view.backgroundColor = [UIColor redColor];
    view.abc = ^(NSString *aaa){

      abc = aaa;
    

    };
    AppDelegate *delegate = (AppDelegate *)[UIApplication sharedApplication].delegate;
    UIWindow *keywindow = delegate.window;
    [keywindow addSubview:view];
    [view removeFromSuperview];

//這樣寫block也不屬于self
void(^foo)(NSStringstr)= ^(NSString str){

    abc = str;
};
foo(@"1111");

}

2.如果此時的block屬于self 則要寫方法賦值賦值 例如添加在self.view上的View:

  • (void)viewDidLoad {
    [super viewDidLoad];

    __weak typeof(self) weakSelf = self;
    AView *view = [[AView alloc] init];
    view.frame = CGRectMake(100, 100, 100, 100);
    view.backgroundColor = [UIColor redColor];
    view.abc = ^(NSString *aaa){
    [weakSelf setAbc:aaa];
    };
    [self.view addSubview:view];
    }

-(void)setAbc:(NSString *)a{

abc = a;

}

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

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

  • *7月8日上午 N:Block :跟一個函數(shù)塊差不多,會對里面所有的內(nèi)容的引用計數(shù)+1,想要解決就用__block...
    炙冰閱讀 2,727評論 1 14
  • *面試心聲:其實這些題本人都沒怎么背,但是在上海 兩周半 面了大約10家 收到差不多3個offer,總結起來就是把...
    Dove_iOS閱讀 27,604評論 30 472
  • 1、截取字符串”20 | http://www.baidu.com”中,”|”字符前面和后面的數(shù)據(jù),分別輸出它們 ...
    強子ly閱讀 3,134評論 8 46
  • iOS開發(fā)系列--網(wǎng)絡開發(fā) 概覽 大部分應用程序都或多或少會牽扯到網(wǎng)絡開發(fā),例如說新浪微博、微信等,這些應用本身可...
    lichengjin閱讀 4,034評論 2 7
  • 設計模式是什么? 你知道哪些設計模式,并簡要敘述? 設計模式是一種編碼經(jīng)驗,就是用比較成熟的邏輯去處理某一種類型的...
    Jt_Self閱讀 831評論 0 4

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