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: <a rel="next" accesskey="n" href="Forwarding-hook.html#Forwarding-hook">Forwarding hook</a>, 52Up: <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