BNRItemStore
is a singleton, and I was confused on why super allocWithZone:
must be called instead of plain old super alloc
. And then
From Apple's documentation:
This method exists for historical reasons; memory zones are no longer used by Objective-C.
[super alloc]
will call through to allocWithZone:
, which you've overridden to do something else. In order to actually get the superclass's implementation of allocWithZone:
(which is what you want there) rather than the overridden version, you must send allocWithZone:
explicitly.
The super
keyword represents the same object as self
; it just tells the method dispatch mechanism to start looking for the corresponding method in the superclass rather than the current class.
Thus, [super alloc]
would go up to the superclass, and get the implementation there, which looks something like:
+ (id) alloc
{
return [self allocWithZone:NULL];
}
Here, self
still represents your custom class, and thus, your overridden allocWithZone:
is run, which will send your program into an infinite loop.