下面兩段**都在主線程中執行,我們在看別人**時會發現有時會直接呼叫,有時會利用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 上述的方法可以靈活的運用,使用方便,只需要告訴他會呼叫什麼方法,然後在多長時間對他進...