| [ << ] | [ < ] | [ Up ] | [ > ] | [ >> ] | [Top] | [Contents] | [Index] | [ ? ] |
8.2.1 What you can and what you cannot do in +load
+load is to be used only as a last resort. Because it is
executed very early, most of the Objective-C runtime machinery will
not be ready when +load is executed; hence +load works
best for executing C code that is independent on the Objective-C
runtime.
The +load implementation in the GNU runtime guarantees you the
following things:
- you can write whatever C code you like;
- you can allocate and send messages to objects whose class is implemented in the same file;
-
the
+loadimplementation of all super classes of a class are executed before the+loadof that class is executed; -
the
+loadimplementation of a class is executed before the+loadimplementation of any category.
In particular, the following things, even if they can work in a particular case, are not guaranteed:
- allocation of or sending messages to arbitrary objects;
- allocation of or sending messages to objects whose classes have a category implemented in the same file;
-
sending messages to Objective-C constant strings (
@"this is a constant string");
You should make no assumptions about receiving +load in sibling
classes when you write +load of a class. The order in which
sibling classes receive +load is not guaranteed.
The order in which +load and +initialize are called could
be problematic if this matters. If you don’t allocate objects inside
+load, it is guaranteed that +load is called before
+initialize. If you create an object inside +load the
+initialize method of object’s class is invoked even if
+load was not invoked. Note if you explicitly call +load
on a class, +initialize will be called first. To avoid possible
problems try to implement only one of these methods.
The +load method is also invoked when a bundle is dynamically
loaded into your running program. This happens automatically without any
intervening operation from you. When you write bundles and you need to
write +load you can safely create and send messages to objects whose
classes already exist in the running program. The same restrictions as
above apply to classes defined in bundle.
| [ << ] | [ < ] | [ Up ] | [ > ] | [ >> ] | [Top] | [Contents] | [Index] | [ ? ] |
This document was generated on October 19, 2013 using texi2html 5.0.
