# objc\_msgSend's New Prototype

DevFeed: [objc\_msgSend's New Prototype](<https://devfeed.tech/articles/objc-msgsend-s-new-prototype-30631.md>)

Original publisher: [Read original article](<http://www.mikeash.com/pyblog/objc_msgsends-new-prototype.html>)

Author: Mike Ash

Published: 2019-10-11T12:09:00Z

Content type: article

Language: en

Sources: [Mike Ash](<https://devfeed.tech/sources/mike-ash.md>)

Topics: [Code](<https://devfeed.tech/topics/code.md>), [Assembly](<https://devfeed.tech/topics/assembly.md>), [Cache](<https://devfeed.tech/topics/cache.md>), [Compiler](<https://devfeed.tech/topics/compiler.md>)

Tags: [article](<https://devfeed.tech/tags/article.md>), [assembly](<https://devfeed.tech/tags/assembly.md>), [cache](<https://devfeed.tech/tags/cache.md>), [code](<https://devfeed.tech/tags/code.md>), [compiler](<https://devfeed.tech/tags/compiler.md>)

## AI overview

The article explains why Apple's newer OS documentation changed the declared prototype of objc_msgSend and related functions to use void parameters and return types. It argues that the true prototype is determined by the method implementation ultimately called, while the compiler uses the method's declared type signature to generate compatible argument and return-value handling.

## Source excerpt

Apple's new OSes are out. If you've looked through the documentation, you may have noticed that the prototype for objc_msgSend has changed. Previously, it was declared as a function that took id, SEL, and variadic arguments after that, and returned id. Now it's declared as a function that takes and returns void. Similar functions like objc_msgSendSuper also became void/void. Why the change? (Read More)