我們在xcode中使用objc寫代碼的時候往往會碰到動态調用方法的時候.
如果是靜态調用這很常見,不會有任何問題:
但如果method是運作時變化的值,則編譯器就會發出警告:
![](https://img.laitimes.com/img/_0nNw4CM6IyYiwiM6ICdiwiIyEjNzIDN1cDMyEjMxUTMwIzLcRXZu5ibkN3Yuc2bsJmLn1Wavw1LcpDc0RHaiojIsJye.jpg)
簡單來說,這是因為編譯器在開啟arc後不知道該方法的傳回值是什麼,該如何處理,是标記為ns_returns_retained還是ns_returns_autoreleased.
在網上搜了一下有幾種辦法可以解決,首先如果動态調用的方法不傳回值,則可以使用afterdelay來消除警告:
如果傳回值則可以使用宏來消除警告:
然後在需要的地方用宏包含:
最後一種方法是使用imp調用的方式,以下是我寫的調用包裝器:
注意方法傳回的是id,意味着可以是任何objc的對象值,但你必須時刻清楚實際傳回值的類型:
這裡我知道傳回的值實際是nsstring類型,是以沒有問題.