• Home
  • History
  • Annotate
  • Line#
  • Navigate
  • Raw
  • Download
  • only in /asuswrt-rt-n18u-9.0.0.4.380.2695/release/src-rt-6.x.4708/toolchains/hndtools-armeabi-2011.09/share/doc/arm-arm-none-eabi/html/gcc/
1<html lang="en">
2<head>
3<title>Dynamically registering methods - Using the GNU Compiler Collection (GCC)</title>
4<meta http-equiv="Content-Type" content="text/html">
5<meta name="description" content="Using the GNU Compiler Collection (GCC)">
6<meta name="generator" content="makeinfo 4.13">
7<link title="Top" rel="start" href="index.html#Top">
8<link rel="up" href="Messaging-with-the-GNU-Objective_002dC-runtime.html#Messaging-with-the-GNU-Objective_002dC-runtime" title="Messaging with the GNU Objective-C runtime">
9<link rel="next" href="Forwarding-hook.html#Forwarding-hook" title="Forwarding hook">
10<link href="http://www.gnu.org/software/texinfo/" rel="generator-home" title="Texinfo Homepage">
11<!--
12Copyright (C) 1988, 1989, 1992, 1993, 1994, 1995, 1996, 1997,
131998, 1999, 2000, 2001, 2002, 2003, 2004, 2005, 2006, 2007, 2008, 2009,
142010 Free Software Foundation, Inc.
15
16Permission is granted to copy, distribute and/or modify this document
17under the terms of the GNU Free Documentation License, Version 1.3 or
18any later version published by the Free Software Foundation; with the
19Invariant Sections being ``Funding Free Software'', the Front-Cover
20Texts being (a) (see below), and with the Back-Cover Texts being (b)
21(see below).  A copy of the license is included in the section entitled
22``GNU Free Documentation License''.
23
24(a) The FSF's Front-Cover Text is:
25
26     A GNU Manual
27
28(b) The FSF's Back-Cover Text is:
29
30     You have freedom to copy and modify this GNU Manual, like GNU
31     software.  Copies published by the Free Software Foundation raise
32     funds for GNU development.-->
33<meta http-equiv="Content-Style-Type" content="text/css">
34<style type="text/css"><!--
35  pre.display { font-family:inherit }
36  pre.format  { font-family:inherit }
37  pre.smalldisplay { font-family:inherit; font-size:smaller }
38  pre.smallformat  { font-family:inherit; font-size:smaller }
39  pre.smallexample { font-size:smaller }
40  pre.smalllisp    { font-size:smaller }
41  span.sc    { font-variant:small-caps }
42  span.roman { font-family:serif; font-weight:normal; } 
43  span.sansserif { font-family:sans-serif; font-weight:normal; } 
44--></style>
45<link rel="stylesheet" type="text/css" href="../cs.css">
46</head>
47<body>
48<div class="node">
49<a name="Dynamically-registering-methods"></a>
50<p>
51Next:&nbsp;<a rel="next" accesskey="n" href="Forwarding-hook.html#Forwarding-hook">Forwarding hook</a>,
52Up:&nbsp;<a rel="up" accesskey="u" href="Messaging-with-the-GNU-Objective_002dC-runtime.html#Messaging-with-the-GNU-Objective_002dC-runtime">Messaging with the GNU Objective-C runtime</a>
53<hr>
54</div>
55
56<h4 class="subsection">8.10.1 Dynamically registering methods</h4>
57
58<p>If <code>objc_msg_lookup()</code> does not find a suitable method
59implementation, because the receiver does not implement the required
60method, it tries to see if the class can dynamically register the
61method.
62
63 <p>To do so, the runtime checks if the class of the receiver implements
64the method
65
66<pre class="smallexample">     + (BOOL) resolveInstanceMethod: (SEL)selector;
67</pre>
68 <p>in the case of an instance method, or
69
70<pre class="smallexample">     + (BOOL) resolveClassMethod: (SEL)selector;
71</pre>
72 <p>in the case of a class method.  If the class implements it, the
73runtime invokes it, passing as argument the selector of the original
74method, and if it returns <code>YES</code>, the runtime tries the lookup
75again, which could now succeed if a matching method was added
76dynamically by <code>+resolveInstanceMethod:</code> or
77<code>+resolveClassMethod:</code>.
78
79 <p>This allows classes to dynamically register methods (by adding them to
80the class using <code>class_addMethod</code>) when they are first called. 
81To do so, a class should implement <code>+resolveInstanceMethod:</code> (or,
82depending on the case, <code>+resolveClassMethod:</code>) and have it
83recognize the selectors of methods that can be registered dynamically
84at runtime, register them, and return <code>YES</code>.  It should return
85<code>NO</code> for methods that it does not dynamically registered at
86runtime.
87
88 <p>If <code>+resolveInstanceMethod:</code> (or <code>+resolveClassMethod:</code>) is
89not implemented or returns <code>NO</code>, the runtime then tries the
90forwarding hook.
91
92 <p>Support for <code>+resolveInstanceMethod:</code> and
93<code>resolveClassMethod:</code> was added to the GNU Objective-C runtime in
94GCC version 4.6.
95
96<!-- ========================================================================= -->
97 </body></html>
98
99