This is a strange one. I don't see anything illegal I am doing. NSMutableDictionary's real class is of course CFDictionary and that will be returned from class. But why is it going into recursion on retain ?
UPDATE: Thanks to Ken Ferry from the MacOSXDev mailing list, this piece of code can be made usable thusly:
#import <Foundation/Foundation.h>
int main (int argc, const char * argv[])
{
NSAutoreleasePool *pool;
NSMutableDictionary *dict;
NSMutableDictionary *other;
pool = [NSAutoreleasePool new];
dict = [NSMutableDictionary dictionary];
other = [[[dict class] new] autorelease];
NSLog( @"A");
[other retain]; // Program received signal: “EXC_BAD_ACCESS”.
NSLog( @"B");
[pool release];
return( 0);
}
UPDATE: Thanks to Ken Ferry from the MacOSXDev mailing list, this piece of code can be made usable thusly:
other = [[[dict classForCoder] new] autorelease];