-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathPreprocessor-Macros.html
183 lines (175 loc) · 10.4 KB
/
Preprocessor-Macros.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
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
<!-- 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: Preprocessor Macros</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('Preprocessor-Macros.html','');});
</script>
<div id="doc-content">
<div class="header">
<div class="summary">
<a href="#define-members">Macros</a> </div>
<div class="headertitle">
<div class="title">Preprocessor Macros<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="define-members"></a>
Macros</h2></td></tr>
<tr class="memitem:g__NI_DEPRECATED_METHOD"><td class="memItemLeft" align="right" valign="top">#define </td><td class="memItemRight" valign="bottom"><a class="el" href="Preprocessor-Macros.html#g__NI_DEPRECATED_METHOD">__NI_DEPRECATED_METHOD</a>   __attribute__((deprecated))</td></tr>
<tr class="separator:g__NI_DEPRECATED_METHOD"><td class="memSeparator" colspan="2"> </td></tr>
<tr class="memitem:gNI_FIX_CATEGORY_BUG"><td class="memItemLeft" align="right" valign="top">#define </td><td class="memItemRight" valign="bottom"><a class="el" href="Preprocessor-Macros.html#gNI_FIX_CATEGORY_BUG">NI_FIX_CATEGORY_BUG</a>(name)</td></tr>
<tr class="separator:gNI_FIX_CATEGORY_BUG"><td class="memSeparator" colspan="2"> </td></tr>
<tr class="memitem:gRGBCOLOR"><td class="memItemLeft" align="right" valign="top">#define </td><td class="memItemRight" valign="bottom"><a class="el" href="Preprocessor-Macros.html#gRGBCOLOR">RGBCOLOR</a>(r, g, b)   [UIColor colorWithRed:(r)/255.0f green:(g)/255.0f blue:(b)/255.0f alpha:1]</td></tr>
<tr class="separator:gRGBCOLOR"><td class="memSeparator" colspan="2"> </td></tr>
<tr class="memitem:gRGBACOLOR"><td class="memItemLeft" align="right" valign="top">#define </td><td class="memItemRight" valign="bottom"><a class="el" href="Preprocessor-Macros.html#gRGBACOLOR">RGBACOLOR</a>(r, g, b, a)   [UIColor colorWithRed:(r)/255.0f green:(g)/255.0f blue:(b)/255.0f alpha:(a)]</td></tr>
<tr class="separator:gRGBACOLOR"><td class="memSeparator" colspan="2"> </td></tr>
</table>
<a name="details" id="details"></a><h2 class="groupheader">Overview</h2>
<p>Preprocessor macros are added to Nimbus with care. </p>
<p>Macros hide functionality and are difficult to debug, so most macros found in Nimbus are one-liners or compiler utilities.</p>
<h2>Creating Byte- and Hex-based Colors</h2>
<p>Nimbus provides the RGBCOLOR and RGBACOLOR macros for easily creating UIColor objects with byte and hex values.</p>
<h3>Examples</h3>
<div class="fragment"><div class="line">UIColor* color = <a class="code" href="Preprocessor-Macros.html#gRGBCOLOR">RGBCOLOR</a>(255, 128, 64); <span class="comment">// Fully opaque orange</span></div>
<div class="line">UIColor* color = <a class="code" href="Preprocessor-Macros.html#gRGBACOLOR">RGBACOLOR</a>(255, 128, 64, 0.5); <span class="comment">// Orange with 50% transparency</span></div>
<div class="line">UIColor* color = <a class="code" href="Preprocessor-Macros.html#gRGBCOLOR">RGBCOLOR</a>(0xFF, 0x7A, 0x64); <span class="comment">// Hexadecimal color</span></div>
</div><!-- fragment --><h3>Why it exists</h3>
<p>There is no easy way to create UIColor objects using 0 - 255 range values or hexadecimal. This leads to code like this being written:</p>
<div class="fragment"><div class="line">UIColor* color = [UIColor colorWithRed:128.f/255.0f green:64.f/255.0f blue:32.f/255.0f alpha:1]</div>
</div><!-- fragment --><h2>Avoid requiring the -all_load and -force_load flags</h2>
<p>Categories can introduce the need for the -all_load and -force_load because of the fact that the application will not load these categories on startup without them. This is due to the way Xcode deals with .m files that only contain categories: it doesn't load them without the -all_load or -force_load flag specified.</p>
<p>There is, however, a way to force Xcode into loading the category .m file. If you provide an empty class implementation in the .m file then your app will pick up the category implementation.</p>
<p>Example in plain UIKit:</p>
<div class="fragment"><div class="line"><span class="keyword">@interface </span>BogusClass</div>
<div class="line"><span class="keyword">@end</span></div>
<div class="line"><span class="keyword">@implementation </span>BogusClass</div>
<div class="line"><span class="keyword">@end</span></div>
<div class="line"></div>
<div class="line"><span class="keyword">@implementation </span>UIViewController (MyCustomCategory)</div>
<div class="line">...</div>
<div class="line">@end</div>
</div><!-- fragment --><p>NI_FIX_CATEGORY_BUG is a Nimbus macro that you include in your category <code>.m</code> file to save you the trouble of having to write a bogus class for every category. Just be sure that the name you provide to the macro is unique across your project or you will encounter duplicate symbol errors when linking.</p>
<div class="fragment"><div class="line"><a class="code" href="Preprocessor-Macros.html#gNI_FIX_CATEGORY_BUG">NI_FIX_CATEGORY_BUG</a>(UIViewController_MyCustomCategory);</div>
<div class="line"></div>
<div class="line"><span class="keyword">@implementation </span>UIViewController (MyCustomCategory)</div>
<div class="line">...</div>
<div class="line">@end</div>
</div><!-- fragment --> <h2 class="groupheader">Macro Definition Documentation</h2>
<a class="anchor" id="g__NI_DEPRECATED_METHOD"></a>
<div class="memitem">
<h3 class="memname">__NI_DEPRECATED_METHOD   __attribute__((deprecated))</h3>
<div class="memdoc">
<p class="abstract">Mark a method or property as deprecated to the compiler. </p>
<div class="declaration">
#define __NI_DEPRECATED_METHOD;</td></tr>
</div>
<h5>Discussion</h5>
<p>Any use of a deprecated method or property will flag a warning when compiling.</p>
<p>Borrowed from Apple's AvailabiltyInternal.h header.</p>
<pre>
__AVAILABILITY_INTERNAL_DEPRECATED __attribute__((deprecated))
</pre>
</div>
</div>
<a class="anchor" id="gNI_FIX_CATEGORY_BUG"></a>
<div class="memitem">
<h3 class="memname">NI_FIX_CATEGORY_BUG</h3>
<div class="memdoc">
<b>Value:</b><div class="fragment"><div class="line"><span class="keyword">@interface </span>NI_FIX_CATEGORY_BUG_##name : NSObject @end \</div>
<div class="line"><span class="keyword">@implementation </span>NI_FIX_CATEGORY_BUG_##name <span class="keyword">@end</span></div>
</div><!-- fragment -->
<p class="abstract">Force a category to be loaded when an app starts up. </p>
<div class="declaration">
#define NI_FIX_CATEGORY_BUG:;</td></tr>
</div>
<h5>Discussion</h5>
<p>Add this macro before each category implementation, so we don't have to use -all_load or -force_load to load object files from static libraries that only contain categories and no classes. See <a href="http://developer.apple.com/library/mac/#qa/qa2006/qa1490.html">http://developer.apple.com/library/mac/#qa/qa2006/qa1490.html</a> for more info. </p>
</div>
</div>
<a class="anchor" id="gRGBCOLOR"></a>
<div class="memitem">
<h3 class="memname">RGBCOLOR   [UIColor colorWithRed:(r)/255.0f green:(g)/255.0f blue:(b)/255.0f alpha:1]</h3>
<div class="memdoc">
<p class="abstract">Creates an opaque UIColor object from a byte-value color definition. </p>
<div class="declaration">
#define RGBCOLOR;</td></tr>
</div>
</div>
</div>
<a class="anchor" id="gRGBACOLOR"></a>
<div class="memitem">
<h3 class="memname">RGBACOLOR   [UIColor colorWithRed:(r)/255.0f green:(g)/255.0f blue:(b)/255.0f alpha:(a)]</h3>
<div class="memdoc">
<p class="abstract">Creates a UIColor object from a byte-value color definition and alpha transparency. </p>
<div class="declaration">
#define RGBACOLOR;</td></tr>
</div>
</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>