Objective-C-Runtime-Fehler beim Benennen einer Superklasse "Nachricht"

Ich habe die folgende Klassenhierarchie:

@interface Message : NSObject {}
@end

@implementation Message
- (void) dealloc
{
    // I won't be called
    [super dealloc];
}
@end

@interface FooMessage : Message {}
@end

@implementation FooMessage
- (void) dealloc
{
    // should call Message - dealloc
    [super dealloc];
}
@end

Und der folgende Komponententest:

- (void) test
{
    FooMessage* msg = [[FooMessage alloc] init];
    [msg release];
}

Der Test schlägt mit EXC_BAD_INSTRUCTION immer fehl.FooMessage nennt es Super Class Destruktor indealloc, aber der Anruf kommt dort nie an. Stattdessen löst die Objective-C-Laufzeit den Aufruf an einen anderen Ort auf:

Der Fehler tritt nicht auf, wenn dasMessage Basisklasse wird in etwas anderes umbenannt, z.AbstractMessage. Es scheint, dass es eine andere Klasse mit dem Namen @ giMessage, dessen Definition nicht öffentlich verfügbar ist.

Ist das ein Bug? Was ist hier wirklich los? Verstoße ich gegen Namensbeschränkungen (obwohl ich denke, der Compiler sollte mich davor warnen

Es ist XCode 3.1. Kompilieren für iPhone OS 3.0.

Antworten auf die Frage(2)

Ihre Antwort auf die Frage