performselector與直接呼叫的區別
1 直接呼叫
[delegate image**********:self didfinishwithimage:image];
2 使用
performselector呼叫:
[delegate performselector:
@selector
(image**********:didfinishwithimage:) withobject:
self
withobject:image];
區別:1
、performselector
是執行時系統負責去找方法的,在編譯時候不做任何校驗;如果直接呼叫編譯時會自動校驗。
如果image**********
:didfinishwithimage:image
:不存在,那麼直接呼叫
在編譯時候就能夠發現,但是使用
performselector
的話一定是在執行時候才能發現(此時程式崩潰);
cocoa
支援在執行時向某個類新增方法,即方法編譯時不存在但是執行時候存在,這時候必然需要使用
performselector
去呼叫。
所以有時候如果使用了
performselector
,為了程式的健壯性,會使用檢查方法
respondstoselector:
用下面的方式可以隨時隨地向任何物件傳送任何訊息,編譯階段不會報錯,執行階段也不會報錯
if([delegate respondstoselector:
@selector
(image**********:didfinishwithimage:)])
2、直接呼叫方法時候,一定要在標頭檔案中宣告該方法,也要將標頭檔案
import
進來。而使用
performselector
時候,可以不用
import
引入方法所在的標頭檔案,直接用
performselector
呼叫即可。
參考:
取消performSelector 方法
使用performselector 方法 self performselector selector didrunincurrmodel withobject nil afterdelay 3.0f 取消 nsobject cancelpreviousperformrequestswithtarge...
延遲呼叫performSelector介紹
performselector void performselector sel aselector withobject id anargument afterdelay nstimeinterval delay 上述的方法可以靈活的運用,使用方便,只需要告訴他會呼叫什麼方法,然後在多長時間對他進...
performSelector引起的警告解決辦法
在寫專案的時候,兩個動作,同樣的操作,但是傳遞不同的訊息,就想到了 target performselector sell withobject nil 寫完後發現很正常,但是有個警告,本能的就覺得不舒服,仔細一看 performselector may cause a leak because i...