iOS delegate線程引發(fā)的思考

在代理模式中,當obj1通過delegate委托obj2執(zhí)行某個操作時议蟆,我們會對委托執(zhí)行回調(diào)的線程感興趣。

先定義一個viewcontroller作為obj1,在其中執(zhí)行循環(huán)委托TestViewController去執(zhí)行委托

#import "ViewController.h"
#import "TestViewController.h"

@interface ViewController ()

@end

@implementation ViewController

- (void)viewDidLoad {
    [super viewDidLoad];
    [testObject shareInstance];
    UIButton *btn = [[UIButton alloc] initWithFrame:CGRectMake(100, 100, 100, 100)];
    [btn setBackgroundColor:[UIColor redColor]];
    [btn addTarget:self action:@selector(pushNavigate) forControlEvents:UIControlEventTouchUpInside];
    [self.view addSubview:btn];
    [self touchEvent];
    // Do any additional setup after loading the view.
}
-(void)pushNavigate{
    TestViewController *vc = [[TestViewController alloc] init];
    vc.view.backgroundColor = [UIColor greenColor];
    [self.navigationController pushViewController:vc animated:YES];
}

-(void)touchEvent{
    dispatch_queue_t q = dispatch_queue_create("threadTest", DISPATCH_QUEUE_CONCURRENT);
    dispatch_async(q, ^{
        if([[testObject shareInstance].testDelegate respondsToSelector:@selector(delegatePrint:)]) {
            NSLog(@"in loop1%@",[NSThread currentThread]);
            
            [[testObject shareInstance].testDelegate delegatePrint:@"test"];
        }
    });

    [self performSelector:@selector(touchEvent) withObject:nil afterDelay:1];
}

@end

新建一個委托中間人萎战,一個單例

static testObject *share;
@implementation testObject
+(instancetype)shareInstance;
{
    static dispatch_once_t onceToken;
    dispatch_once(&onceToken, ^{
        share = [[super alloc] init];
    });
    return share;
}
@end

再看下被委托人obj2 的內(nèi)容咐容,很簡單的一個委托方法

#import "TestViewController.h"

@interface TestViewController ()

@end

@implementation TestViewController

- (void)viewDidLoad {
    [super viewDidLoad];
    [testObject shareInstance].testDelegate = self;
    // Do any additional setup after loading the view.
}

-(void)delegatePrint:(NSString *)value;
{
    UILabel *lable = [self.view viewWithTag:99];
    lable.text = value;
    NSLog(@"in loop2%@",[NSThread currentThread]);
}


@end

不管obj1在哪個線程中對代理人派發(fā)委托事件,obj2委托執(zhí)行的線程和派發(fā)時線程一致

2019-09-11 11:09:23.706339+0800 xcodeTest[33110:499973] in loop1<NSThread: 0x600003b16700>{number = 4, name = (null)}
2019-09-11 11:09:23.706691+0800 xcodeTest[33110:499973] in loop2<NSThread: 0x600003b16700>{number = 4, name = (null)}

所以啊蚂维,這里有個地方要注意戳粒,在使用代理的時候,代理派發(fā)的線程不確定時虫啥,有些UI主線程的修改蔚约,最好就用block包起來

    dispatch_async(dispatch_get_main_queue(), ^{
        UILabel *lable = [self.view viewWithTag:99];
        lable.text = value;
    });

可以看到obj2的lable更新了

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市涂籽,隨后出現(xiàn)的幾起案子苹祟,更是在濱河造成了極大的恐慌,老刑警劉巖,帶你破解...
    沈念sama閱讀 212,222評論 6 493
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件树枫,死亡現(xiàn)場離奇詭異直焙,居然都是意外死亡,警方通過查閱死者的電腦和手機砂轻,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 90,455評論 3 385
  • 文/潘曉璐 我一進店門奔誓,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人搔涝,你說我怎么就攤上這事厨喂。” “怎么了体谒?”我有些...
    開封第一講書人閱讀 157,720評論 0 348
  • 文/不壞的土叔 我叫張陵杯聚,是天一觀的道長。 經(jīng)常有香客問我抒痒,道長幌绍,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 56,568評論 1 284
  • 正文 為了忘掉前任故响,我火速辦了婚禮傀广,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘彩届。我一直安慰自己伪冰,他們只是感情好,可當我...
    茶點故事閱讀 65,696評論 6 386
  • 文/花漫 我一把揭開白布樟蠕。 她就那樣靜靜地躺著贮聂,像睡著了一般。 火紅的嫁衣襯著肌膚如雪寨辩。 梳的紋絲不亂的頭發(fā)上吓懈,一...
    開封第一講書人閱讀 49,879評論 1 290
  • 那天,我揣著相機與錄音靡狞,去河邊找鬼耻警。 笑死,一個胖子當著我的面吹牛甸怕,可吹牛的內(nèi)容都是我干的甘穿。 我是一名探鬼主播,決...
    沈念sama閱讀 39,028評論 3 409
  • 文/蒼蘭香墨 我猛地睜開眼梢杭,長吁一口氣:“原來是場噩夢啊……” “哼温兼!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起武契,我...
    開封第一講書人閱讀 37,773評論 0 268
  • 序言:老撾萬榮一對情侶失蹤菌仁,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后圈纺,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體了讨,經(jīng)...
    沈念sama閱讀 44,220評論 1 303
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 36,550評論 2 327
  • 正文 我和宋清朗相戀三年钧排,在試婚紗的時候發(fā)現(xiàn)自己被綠了敦腔。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 38,697評論 1 341
  • 序言:一個原本活蹦亂跳的男人離奇死亡恨溜,死狀恐怖符衔,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情糟袁,我是刑警寧澤判族,帶...
    沈念sama閱讀 34,360評論 4 332
  • 正文 年R本政府宣布,位于F島的核電站项戴,受9級特大地震影響形帮,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜周叮,卻給世界環(huán)境...
    茶點故事閱讀 40,002評論 3 315
  • 文/蒙蒙 一辩撑、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧仿耽,春花似錦合冀、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,782評論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至开缎,卻和暖如春棕叫,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背啥箭。 一陣腳步聲響...
    開封第一講書人閱讀 32,010評論 1 266
  • 我被黑心中介騙來泰國打工谍珊, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人急侥。 一個月前我還...
    沈念sama閱讀 46,433評論 2 360
  • 正文 我出身青樓砌滞,卻偏偏與公主長得像,于是被迫代替她去往敵國和親坏怪。 傳聞我的和親對象是個殘疾皇子贝润,可洞房花燭夜當晚...
    茶點故事閱讀 43,587評論 2 350