performSelector呼叫和直接呼叫

2021-08-13 10:19:26 字數 760 閱讀 8860

下面兩段**都在主線程中執行,我們在看別人**時會發現有時會直接呼叫,有時會利用performselector呼叫,今天看到有人在問這個問題,我便做一下總結,

[delegateimage**********:

self

didfinishwithimage:image];

[delegate

performselector:@selector(image**********:didfinishwithimage:)withobject:self

withobject:image];

1、performselector是執行時系統負責去找方法的,在編譯時候不做任何校驗;如果直接呼叫編譯是會自動校驗。如果image**********:didfinishwithimage:image:不存在,那麼直接呼叫 在編譯時候就能夠發現(借助xcode可以寫完就發現),但是使用performselector的話一定是在執行時候才能發現(此時程式崩潰);cocoa支援在執行時向某個類新增方法,即方法編譯時不存在,但是執行時候存在,這時候必然需要使用performselector去呼叫。所以有時候如果使用了performselector,為了程式的健壯性,會使用檢查方法

- (bool)respondstoselector:(sel)aselector;

2、直接呼叫方法時候,一定要在標頭檔案中宣告該方法的使用,也要將標頭檔案import進來。而使用performselector時候, 可以不用import標頭檔案包含方法的物件,直接用performselector呼叫即可。

取消performSelector 方法

使用performselector 方法 self performselector selector didrunincurrmodel withobject nil afterdelay 3.0f 取消 nsobject cancelpreviousperformrequestswithtarge...

performSelector與直接呼叫的區別

performselector與直接呼叫的區別 1 直接呼叫 delegate image self didfinishwithimage image 2 使用 performselector呼叫 delegate performselector selector image didfinishwi...

延遲呼叫performSelector介紹

performselector void performselector sel aselector withobject id anargument afterdelay nstimeinterval delay 上述的方法可以靈活的運用,使用方便,只需要告訴他會呼叫什麼方法,然後在多長時間對他進...