It has something to do with the class and method cache of the Apple
runtime, specifically with the function _class_lookupMethodAndLoadCache () in it. This function is looking up in a cache if a class is already loaded. If
not it sends it (or its superclass a initialize message. If then again there is any objc message send in the initialize method, the cache will be looked up again nad because the class is not
loaded you'll end up in an infinite loop. You can see how this works if
you download the objc4 project from Apple (http://www.opensource.apple.com/darwinsource/tarballs/10.2.6/apsl/objc4.tar.gz, you must be registered for this, but registration is free and Apple
doesn't spam you) and have a look at /objc4/runtime/objc-class.m
This boils down to: Don't send objc messages in initialize if you want to use
the Apple runtime