-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathRuntime-Class-Modifications.html
135 lines (132 loc) · 6.65 KB
/
Runtime-Class-Modifications.html
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
<!-- HTML header for doxygen 1.8.6-->
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
<meta http-equiv="X-UA-Compatible" content="IE=9"/>
<meta name="generator" content="Doxygen 1.8.6-nimbuskit"/>
<title>NimbusKit: Runtime Class Modifications</title>
<link href="tabs.css" rel="stylesheet" type="text/css"/>
<script type="text/javascript" src="jquery.js"></script>
<script type="text/javascript" src="dynsections.js"></script>
<link href="navtree.css" rel="stylesheet" type="text/css"/>
<script type="text/javascript" src="resize.js"></script>
<script type="text/javascript" src="navtree.js"></script>
<script type="text/javascript">
$(document).ready(initResizable);
$(window).load(resizeHeight);
</script>
<link href="doxygen.css" rel="stylesheet" type="text/css" />
<link href="appledocs.css" rel="stylesheet" type="text/css"/>
<link href="nimbuskit.css" rel="stylesheet" type="text/css" />
<script type="text/javascript">
var _gaq = _gaq || [];
_gaq.push(['_setAccount', 'UA-24278774-1']);
_gaq.push(['_setDomainName', 'nimbuskit.info']);
_gaq.push(['_trackPageview']);
(function() {
var ga = document.createElement('script'); ga.type = 'text/javascript'; ga.async = true;
ga.src = ('https:' == document.location.protocol ? 'https://ssl' : 'http://www') + '.google-analytics.com/ga.js';
var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(ga, s);
})();
</script>
</head>
<body>
<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
<div id="titlearea">
<a href="index.html"><img style="float:left" src="nimbus128.png" width="80" height="80" /></a>
<table cellspacing="0" cellpadding="0">
<tbody>
<tr style="height: 56px;">
<td style="padding-left: 0.5em;">
<div id="projectname">NimbusKit
 <span id="projectnumber">1.2.1 - <a href="http://github.com/jverkoey/nimbus">Fork Nimbus on Github</a> - <a href="http://wiki.nimbuskit.info/">Visit the Nimbus Wiki</a></span>
</div>
<div id="projectbrief">The iOS framework that grows only as fast as its documentation</div>
</td>
</tr>
</tbody>
</table>
</div>
<!-- end header part -->
<!-- Generated by Doxygen 1.8.6-nimbuskit -->
</div><!-- top -->
<div id="side-nav" class="ui-resizable side-nav-resizable">
<div id="nav-tree">
<div id="nav-tree-contents">
<div id="nav-sync" class="sync"></div>
</div>
</div>
<div id="splitbar" style="-moz-user-select:none;"
class="ui-resizable-handle">
</div>
</div>
<script type="text/javascript">
$(document).ready(function(){initNavTree('Runtime-Class-Modifications.html','');});
</script>
<div id="doc-content">
<div class="header">
<div class="summary">
<a href="#func-members">Functions</a> </div>
<div class="headertitle">
<div class="title">Runtime Class Modifications<div class="ingroups"><a class="el" href="NimbusCore.html">Nimbus Core</a></div></div> </div>
</div><!--header-->
<div class="contents">
<table class="memberdecls">
<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="func-members"></a>
Functions</h2></td></tr>
<tr class="memitem:gNISwapInstanceMethods"><td class="memItemLeft" align="right" valign="top">void </td><td class="memItemRight" valign="bottom"><a class="el" href="Runtime-Class-Modifications.html#gNISwapInstanceMethods">NISwapInstanceMethods</a> (Class cls, SEL originalSel, SEL newSel)</td></tr>
<tr class="separator:gNISwapInstanceMethods"><td class="memSeparator" colspan="2"> </td></tr>
<tr class="memitem:gNISwapClassMethods"><td class="memItemLeft" align="right" valign="top">void </td><td class="memItemRight" valign="bottom"><a class="el" href="Runtime-Class-Modifications.html#gNISwapClassMethods">NISwapClassMethods</a> (Class cls, SEL originalSel, SEL newSel)</td></tr>
<tr class="separator:gNISwapClassMethods"><td class="memSeparator" colspan="2"> </td></tr>
</table>
<a name="details" id="details"></a><h2 class="groupheader">Overview</h2>
<p>For modifying class implementations at runtime. </p>
<dl class="section attention"><dt>Attention</dt><dd>Please use caution when modifying class implementations at runtime. Apple is prone to rejecting apps for gratuitous use of method swapping. In particular, avoid swapping any <a class="el" href="classNSObject-Protocol.html">NSObject</a> methods such as dealloc, init, and retain/release on UIKit classes.</dd></dl>
<p>See example: <a class="el" href="ExampleRuntimeDebugging_8m-example.html">Runtime Debugging with Method Swizzling</a> </p>
<h2 class="groupheader">Function Documentation</h2>
<a class="anchor" id="gNISwapInstanceMethods"></a>
<div class="memitem">
<h3 class="memname">NISwapInstanceMethods</h3>
<div class="memdoc">
<p class="abstract">Swap two class instance method implementations. </p>
<div class="declaration">
void NISwapInstanceMethods;</td></tr>
</div>
<h5>Discussion</h5>
<p>Use this method when you would like to replace an existing method implementation in a class with your own implementation at runtime. In practice this is often used to replace the implementations of UIKit classes where subclassing isn't an adequate solution.</p>
<p>This will only work for methods declared with a -.</p>
<p>After calling this method, any calls to originalSel will actually call newSel and vice versa.</p>
<p>Uses method_exchangeImplementations to accomplish this.</p>
<ul>
<li>[test] Swap two instance methods on a class. </li>
</ul>
<dl><dt><b>Examples: </b></dt><dd><a class="el" href="ExampleRuntimeDebugging_8m-example.html#a0">ExampleRuntimeDebugging.m</a>.</dd>
</dl>
</div>
</div>
<a class="anchor" id="gNISwapClassMethods"></a>
<div class="memitem">
<h3 class="memname">NISwapClassMethods</h3>
<div class="memdoc">
<p class="abstract">Swap two class method implementations. </p>
<div class="declaration">
void NISwapClassMethods;</td></tr>
</div>
<h5>Discussion</h5>
<p>Use this method when you would like to replace an existing method implementation in a class with your own implementation at runtime. In practice this is often used to replace the implementations of UIKit classes where subclassing isn't an adequate solution.</p>
<p>This will only work for methods declared with a +.</p>
<p>After calling this method, any calls to originalSel will actually call newSel and vice versa.</p>
<p>Uses method_exchangeImplementations to accomplish this.</p>
<ul>
<li>[test] Swap two static methods on a class. </li>
</ul>
</div>
</div>
</div><!-- contents -->
</div><!-- doc-content -->
<!-- HTML footer for doxygen 1.8.6-->
<!-- start footer part -->
<script type="text/javascript" src="widget.js"></script>
</body>
</html>