You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

Method-signatures.html 5.9KB

3 years ago
123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132
  1. <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
  2. <html>
  3. <!-- Copyright (C) 1988-2020 Free Software Foundation, Inc.
  4. Permission is granted to copy, distribute and/or modify this document
  5. under the terms of the GNU Free Documentation License, Version 1.3 or
  6. any later version published by the Free Software Foundation; with the
  7. Invariant Sections being "Funding Free Software", the Front-Cover
  8. Texts being (a) (see below), and with the Back-Cover Texts being (b)
  9. (see below). A copy of the license is included in the section entitled
  10. "GNU Free Documentation License".
  11. (a) The FSF's Front-Cover Text is:
  12. A GNU Manual
  13. (b) The FSF's Back-Cover Text is:
  14. You have freedom to copy and modify this GNU Manual, like GNU
  15. software. Copies published by the Free Software Foundation raise
  16. funds for GNU development. -->
  17. <!-- Created by GNU Texinfo 6.5, http://www.gnu.org/software/texinfo/ -->
  18. <head>
  19. <meta http-equiv="Content-Type" content="text/html; charset=utf-8">
  20. <title>Method signatures (Using the GNU Compiler Collection (GCC))</title>
  21. <meta name="description" content="Method signatures (Using the GNU Compiler Collection (GCC))">
  22. <meta name="keywords" content="Method signatures (Using the GNU Compiler Collection (GCC))">
  23. <meta name="resource-type" content="document">
  24. <meta name="distribution" content="global">
  25. <meta name="Generator" content="makeinfo">
  26. <link href="index.html#Top" rel="start" title="Top">
  27. <link href="Option-Index.html#Option-Index" rel="index" title="Option Index">
  28. <link href="index.html#SEC_Contents" rel="contents" title="Table of Contents">
  29. <link href="Type-encoding.html#Type-encoding" rel="up" title="Type encoding">
  30. <link href="Garbage-Collection.html#Garbage-Collection" rel="next" title="Garbage Collection">
  31. <link href="_0040encode.html#g_t_0040encode" rel="prev" title="@encode">
  32. <style type="text/css">
  33. <!--
  34. a.summary-letter {text-decoration: none}
  35. blockquote.indentedblock {margin-right: 0em}
  36. blockquote.smallindentedblock {margin-right: 0em; font-size: smaller}
  37. blockquote.smallquotation {font-size: smaller}
  38. div.display {margin-left: 3.2em}
  39. div.example {margin-left: 3.2em}
  40. div.lisp {margin-left: 3.2em}
  41. div.smalldisplay {margin-left: 3.2em}
  42. div.smallexample {margin-left: 3.2em}
  43. div.smalllisp {margin-left: 3.2em}
  44. kbd {font-style: oblique}
  45. pre.display {font-family: inherit}
  46. pre.format {font-family: inherit}
  47. pre.menu-comment {font-family: serif}
  48. pre.menu-preformatted {font-family: serif}
  49. pre.smalldisplay {font-family: inherit; font-size: smaller}
  50. pre.smallexample {font-size: smaller}
  51. pre.smallformat {font-family: inherit; font-size: smaller}
  52. pre.smalllisp {font-size: smaller}
  53. span.nolinebreak {white-space: nowrap}
  54. span.roman {font-family: initial; font-weight: normal}
  55. span.sansserif {font-family: sans-serif; font-weight: normal}
  56. ul.no-bullet {list-style: none}
  57. -->
  58. </style>
  59. </head>
  60. <body lang="en">
  61. <a name="Method-signatures"></a>
  62. <div class="header">
  63. <p>
  64. Previous: <a href="_0040encode.html#g_t_0040encode" accesskey="p" rel="prev">@encode</a>, Up: <a href="Type-encoding.html#Type-encoding" accesskey="u" rel="up">Type encoding</a> &nbsp; [<a href="index.html#SEC_Contents" title="Table of contents" rel="contents">Contents</a>][<a href="Option-Index.html#Option-Index" title="Index" rel="index">Index</a>]</p>
  65. </div>
  66. <hr>
  67. <a name="Method-Signatures"></a>
  68. <h4 class="subsection">8.3.3 Method Signatures</h4>
  69. <p>This section documents the encoding of method types, which is rarely
  70. needed to use Objective-C. You should skip it at a first reading; the
  71. runtime provides functions that will work on methods and can walk
  72. through the list of parameters and interpret them for you. These
  73. functions are part of the public &ldquo;API&rdquo; and are the preferred way to
  74. interact with method signatures from user code.
  75. </p>
  76. <p>But if you need to debug a problem with method signatures and need to
  77. know how they are implemented (i.e., the &ldquo;ABI&rdquo;), read on.
  78. </p>
  79. <p>Methods have their &ldquo;signature&rdquo; encoded and made available to the
  80. runtime. The &ldquo;signature&rdquo; encodes all the information required to
  81. dynamically build invocations of the method at runtime: return type
  82. and arguments.
  83. </p>
  84. <p>The &ldquo;signature&rdquo; is a null-terminated string, composed of the following:
  85. </p>
  86. <ul>
  87. <li> The return type, including type qualifiers. For example, a method
  88. returning <code>int</code> would have <code>i</code> here.
  89. </li><li> The total size (in bytes) required to pass all the parameters. This
  90. includes the two hidden parameters (the object <code>self</code> and the
  91. method selector <code>_cmd</code>).
  92. </li><li> Each argument, with the type encoding, followed by the offset (in
  93. bytes) of the argument in the list of parameters.
  94. </li></ul>
  95. <p>For example, a method with no arguments and returning <code>int</code> would
  96. have the signature <code>i8@0:4</code> if the size of a pointer is 4. The
  97. signature is interpreted as follows: the <code>i</code> is the return type
  98. (an <code>int</code>), the <code>8</code> is the total size of the parameters in
  99. bytes (two pointers each of size 4), the <code>@0</code> is the first
  100. parameter (an object at byte offset <code>0</code>) and <code>:4</code> is the
  101. second parameter (a <code>SEL</code> at byte offset <code>4</code>).
  102. </p>
  103. <p>You can easily find more examples by running the &ldquo;strings&rdquo; program
  104. on an Objective-C object file compiled by GCC. You&rsquo;ll see a lot of
  105. strings that look very much like <code>i8@0:4</code>. They are signatures
  106. of Objective-C methods.
  107. </p>
  108. <hr>
  109. <div class="header">
  110. <p>
  111. Previous: <a href="_0040encode.html#g_t_0040encode" accesskey="p" rel="prev">@encode</a>, Up: <a href="Type-encoding.html#Type-encoding" accesskey="u" rel="up">Type encoding</a> &nbsp; [<a href="index.html#SEC_Contents" title="Table of contents" rel="contents">Contents</a>][<a href="Option-Index.html#Option-Index" title="Index" rel="index">Index</a>]</p>
  112. </div>
  113. </body>
  114. </html>