項目配置文件 -> Build Settings -> Enable Strict Checking of objc_msgSend Calls
這個字段默認為YES
此時直接使用objc_msgSend
會有如下的結果
- 代碼無參數提示
- 會報錯
默認設置
Yes時的結果
將配置文件的Yes-->No,效果如下,問題解決
手動設置為No
No時的結果
還有一種解決方式無需更改項目配置文件(依然為Yes)
由于objc_msgSend
函數本身是無返回值無參數
的函數, 所以要給它強制轉換類型代碼如下:
((void (*) (id, SEL)) (void *)objc_msgSend)(callMe, @selector(callMeNow));
((void (*) (id, SEL)) (void *)objc_msgSend)(callMe, sel_registerName("callMeNow"));
@selector(callMeNow)
等價于sel_registerName("callMeNow")
,都是SEL