iOS objc_msgSend Too many arguments to function call

項目配置文件 -> 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

最后編輯于
?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。

推薦閱讀更多精彩內容