performSelector

1塌西、明確方法所在位置

分別在NSObject.h 柔吼、NSRunloop.h 掰邢、NSThread.h 三個類中牺陶,是不是很神奇。(其中在NSRunloop.h 尸变、NSThread.h文件中都是NSObject的分類)

位置1.jpeg

位置2.jpeg

位置3.jpeg

2义图、在NSObject.h中的方法

1、 - (id)performSelector:(SEL)aSelector;

2召烂、 - (id)performSelector:(SEL)aSelector withObject:(id)object;

3碱工、 - (id)performSelector:(SEL)aSelector withObject:(id)object1 withObject:(id)object2;

三個方法均為同步執(zhí)行,與線程無關(guān)奏夫,在主線程和子線程中均可調(diào)用怕篷。等同于直接調(diào)用該方法。

與直接調(diào)用方法區(qū)別:直接調(diào)用編譯時會自動校驗(yàn)酗昼。performSelector在運(yùn)行時去找方法廊谓,在編譯時不做校驗(yàn)。

使用查看此鏈接

3麻削、在NSRunloop.h中的方法

1蒸痹、- (void)performSelector:(SEL)aSelector withObject:(nullable id)anArgument afterDelay:(NSTimeInterval)delay inModes:(NSArray *)modes;

2、- (void)performSelector:(SEL)aSelector withObject:(nullable id)anArgument afterDelay:(NSTimeInterval)delay;

3.1呛哟、這兩個方法為異步執(zhí)行叠荠,delay值為0,仍為異步執(zhí)行扫责。

1榛鼎、在主線程執(zhí)行,方法調(diào)用成功。

2者娱、在子線程執(zhí)行抡笼,需要開啟子線程Runloop,方法才可以調(diào)用成功黄鳍。

注意:調(diào)用該方法之前或在該方法所在的VC釋放時主動調(diào)用取消函數(shù)推姻,以確保不會內(nèi)存泄露。

3.2际起、可控制延遲調(diào)用方法的取消操作:

1拾碌、+ (void)cancelPreviousPerformRequestsWithTarget:(id)aTarget selector:(SEL)aSelector object:(nullable id)anArgument;

2、+ (void)cancelPreviousPerformRequestsWithTarget:(id)aTarget;

4街望、在NSThread.h中的方法

4.1校翔、在主線程調(diào)用方法

1、- (void)performSelectorOnMainThread:(SEL)aSelector withObject:(nullable id)arg waitUntilDone:(BOOL)wait modes:(nullable NSArray *)array;

2灾前、- (void)performSelectorOnMainThread:(SEL)aSelector withObject:(nullable id)arg waitUntilDone:(BOOL)wait;

在主線程和子線程中均可執(zhí)行防症,都會在主線程調(diào)用Selector方法。

4.1.1哎甲、在子線程中設(shè)置wait值

wait=YES:當(dāng)前線程被阻塞蔫敲,主線程執(zhí)行完Selector,接著執(zhí)行炭玫。

-(void)viewDidLoad{[superviewDidLoad];dispatch_queue_t queue=dispatch_queue_create("cwwng-queue",DISPATCH_QUEUE_CONCURRENT);dispatch_async(queue,^{NSLog(@"1");[selfperformSelectorOnMainThread:@selector(testAction)withObject:nil waitUntilDone:YES];NSLog(@"2");});}-(void)testAction{sleep(3);NSLog(@"testAction");}2020-11-2120:26:12.252984+0800CwwngDemo[28225:462843]12020-11-2120:26:15.289730+0800CwwngDemo[28225:462744]testAction2020-11-2120:26:15.289991+0800CwwngDemo[28225:462843]2

wait=NO:當(dāng)前線程不被阻塞奈嘿。

-(void)viewDidLoad{[superviewDidLoad];dispatch_queue_t queue=dispatch_queue_create("cwwng-queue",DISPATCH_QUEUE_CONCURRENT);dispatch_async(queue,^{NSLog(@"1");[selfperformSelectorOnMainThread:@selector(testAction)withObject:nil waitUntilDone:NO];NSLog(@"2");});}-(void)testAction{sleep(3);NSLog(@"testAction");}2020-11-2120:28:50.383884+0800CwwngDemo[28347:465953]12020-11-2120:28:50.384127+0800CwwngDemo[28347:465953]22020-11-2120:28:53.410808+0800CwwngDemo[28347:465859]testAction

4.1.2、在主線程中設(shè)置wait值

wait=YES:等待Selector執(zhí)行完吞加,再接著執(zhí)行裙犹。

-(void)viewDidLoad{[superviewDidLoad];NSLog(@"1");[selfperformSelectorOnMainThread:@selector(testAction)withObject:nil waitUntilDone:YES];NSLog(@"2");}-(void)testAction{sleep(3);NSLog(@"testAction");}2020-11-2120:33:53.966768+0800CwwngDemo[28608:472716]12020-11-2120:33:56.967413+0800CwwngDemo[28608:472716]testAction2020-11-2120:33:56.967738+0800CwwngDemo[28608:472716]2

wait=NO:不等待Selector執(zhí)行完,接著執(zhí)行衔憨。

-(void)viewDidLoad{[superviewDidLoad];NSLog(@"1");[selfperformSelectorOnMainThread:@selector(testAction)withObject:nil waitUntilDone:NO];NSLog(@"2");}-(void)testAction{sleep(3);NSLog(@"testAction");}2020-11-2120:38:55.042160+0800CwwngDemo[28838:477847]12020-11-2120:38:55.042508+0800CwwngDemo[28838:477847]22020-11-2120:38:58.087345+0800CwwngDemo[28838:477847]testAction

4.2叶圃、在指定線程調(diào)用方法

(void)performSelector:(SEL)aSelector onThread:(NSThread *)thr withObject:(nullable id)arg waitUntilDone:(BOOL)wait modes:(nullable NSArray<NSString *> *)array API_AVAILABLE(macos(10.5), ios(2.0), watchos(2.0), tvos(9.0));

(void)performSelector:(SEL)aSelector onThread:(NSThread *)thr withObject:(nullable id)arg waitUntilDone:(BOOL)wait API_AVAILABLE(macos(10.5), ios(2.0), watchos(2.0), tvos(9.0));

4.3、開啟子線程在后臺運(yùn)行

(void)performSelectorInBackground:(SEL)aSelector withObject:(nullable id)arg API_AVAILABLE(macos(10.5), ios(2.0), watchos(2.0), tvos(9.0));

作者:Cwwng

鏈接:http://www.reibang.com/p/8db250c1a566

來源:簡書

著作權(quán)歸作者所有践图。商業(yè)轉(zhuǎn)載請聯(lián)系作者獲得授權(quán)掺冠,非商業(yè)轉(zhuǎn)載請注明出處。

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末码党,一起剝皮案震驚了整個濱河市德崭,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌揖盘,老刑警劉巖眉厨,帶你破解...
    沈念sama閱讀 218,036評論 6 506
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異扣讼,居然都是意外死亡缺猛,警方通過查閱死者的電腦和手機(jī)缨叫,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,046評論 3 395
  • 文/潘曉璐 我一進(jìn)店門椭符,熙熙樓的掌柜王于貴愁眉苦臉地迎上來荔燎,“玉大人,你說我怎么就攤上這事销钝∮凶桑” “怎么了?”我有些...
    開封第一講書人閱讀 164,411評論 0 354
  • 文/不壞的土叔 我叫張陵蒸健,是天一觀的道長座享。 經(jīng)常有香客問我,道長似忧,這世上最難降的妖魔是什么渣叛? 我笑而不...
    開封第一講書人閱讀 58,622評論 1 293
  • 正文 為了忘掉前任,我火速辦了婚禮盯捌,結(jié)果婚禮上淳衙,老公的妹妹穿的比我還像新娘。我一直安慰自己饺著,他們只是感情好箫攀,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,661評論 6 392
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著幼衰,像睡著了一般靴跛。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上渡嚣,一...
    開封第一講書人閱讀 51,521評論 1 304
  • 那天梢睛,我揣著相機(jī)與錄音,去河邊找鬼严拒。 笑死扬绪,一個胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的裤唠。 我是一名探鬼主播挤牛,決...
    沈念sama閱讀 40,288評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼种蘸!你這毒婦竟也來了墓赴?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 39,200評論 0 276
  • 序言:老撾萬榮一對情侶失蹤航瞭,失蹤者是張志新(化名)和其女友劉穎诫硕,沒想到半個月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體刊侯,經(jīng)...
    沈念sama閱讀 45,644評論 1 314
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡章办,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,837評論 3 336
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片藕届。...
    茶點(diǎn)故事閱讀 39,953評論 1 348
  • 序言:一個原本活蹦亂跳的男人離奇死亡挪蹭,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出休偶,到底是詐尸還是另有隱情梁厉,我是刑警寧澤,帶...
    沈念sama閱讀 35,673評論 5 346
  • 正文 年R本政府宣布踏兜,位于F島的核電站词顾,受9級特大地震影響,放射性物質(zhì)發(fā)生泄漏碱妆。R本人自食惡果不足惜肉盹,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,281評論 3 329
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望疹尾。 院中可真熱鬧垮媒,春花似錦、人聲如沸航棱。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,889評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽饮醇。三九已至它抱,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間朴艰,已是汗流浹背观蓄。 一陣腳步聲響...
    開封第一講書人閱讀 33,011評論 1 269
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留祠墅,地道東北人侮穿。 一個月前我還...
    沈念sama閱讀 48,119評論 3 370
  • 正文 我出身青樓,卻偏偏與公主長得像毁嗦,于是被迫代替她去往敵國和親亲茅。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,901評論 2 355

推薦閱讀更多精彩內(nèi)容