Method-signatures.html 5.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133
  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-2017 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 5.2, http://www.gnu.org/software/texinfo/ -->
  18. <head>
  19. <title>Using the GNU Compiler Collection (GCC): Method signatures</title>
  20. <meta name="description" content="Using the GNU Compiler Collection (GCC): Method signatures">
  21. <meta name="keywords" content="Using the GNU Compiler Collection (GCC): Method signatures">
  22. <meta name="resource-type" content="document">
  23. <meta name="distribution" content="global">
  24. <meta name="Generator" content="makeinfo">
  25. <meta http-equiv="Content-Type" content="text/html; charset=utf-8">
  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.smallquotation {font-size: smaller}
  36. div.display {margin-left: 3.2em}
  37. div.example {margin-left: 3.2em}
  38. div.indentedblock {margin-left: 3.2em}
  39. div.lisp {margin-left: 3.2em}
  40. div.smalldisplay {margin-left: 3.2em}
  41. div.smallexample {margin-left: 3.2em}
  42. div.smallindentedblock {margin-left: 3.2em; font-size: smaller}
  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.nocodebreak {white-space:nowrap}
  54. span.nolinebreak {white-space:nowrap}
  55. span.roman {font-family:serif; font-weight:normal}
  56. span.sansserif {font-family:sans-serif; font-weight:normal}
  57. ul.no-bullet {list-style: none}
  58. -->
  59. </style>
  60. </head>
  61. <body lang="en" bgcolor="#FFFFFF" text="#000000" link="#0000FF" vlink="#800080" alink="#FF0000">
  62. <a name="Method-signatures"></a>
  63. <div class="header">
  64. <p>
  65. 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>
  66. </div>
  67. <hr>
  68. <a name="Method-Signatures"></a>
  69. <h4 class="subsection">8.3.3 Method Signatures</h4>
  70. <p>This section documents the encoding of method types, which is rarely
  71. needed to use Objective-C. You should skip it at a first reading; the
  72. runtime provides functions that will work on methods and can walk
  73. through the list of parameters and interpret them for you. These
  74. functions are part of the public &ldquo;API&rdquo; and are the preferred way to
  75. interact with method signatures from user code.
  76. </p>
  77. <p>But if you need to debug a problem with method signatures and need to
  78. know how they are implemented (i.e., the &ldquo;ABI&rdquo;), read on.
  79. </p>
  80. <p>Methods have their &ldquo;signature&rdquo; encoded and made available to the
  81. runtime. The &ldquo;signature&rdquo; encodes all the information required to
  82. dynamically build invocations of the method at runtime: return type
  83. and arguments.
  84. </p>
  85. <p>The &ldquo;signature&rdquo; is a null-terminated string, composed of the following:
  86. </p>
  87. <ul>
  88. <li> The return type, including type qualifiers. For example, a method
  89. returning <code>int</code> would have <code>i</code> here.
  90. </li><li> The total size (in bytes) required to pass all the parameters. This
  91. includes the two hidden parameters (the object <code>self</code> and the
  92. method selector <code>_cmd</code>).
  93. </li><li> Each argument, with the type encoding, followed by the offset (in
  94. bytes) of the argument in the list of parameters.
  95. </li></ul>
  96. <p>For example, a method with no arguments and returning <code>int</code> would
  97. have the signature <code>i8@0:4</code> if the size of a pointer is 4. The
  98. signature is interpreted as follows: the <code>i</code> is the return type
  99. (an <code>int</code>), the <code>8</code> is the total size of the parameters in
  100. bytes (two pointers each of size 4), the <code>@0</code> is the first
  101. parameter (an object at byte offset <code>0</code>) and <code>:4</code> is the
  102. second parameter (a <code>SEL</code> at byte offset <code>4</code>).
  103. </p>
  104. <p>You can easily find more examples by running the &ldquo;strings&rdquo; program
  105. on an Objective-C object file compiled by GCC. You&rsquo;ll see a lot of
  106. strings that look very much like <code>i8@0:4</code>. They are signatures
  107. of Objective-C methods.
  108. </p>
  109. <hr>
  110. <div class="header">
  111. <p>
  112. 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>
  113. </div>
  114. </body>
  115. </html>