Nicht unbedingt.Original von M.A.X
Doch noch eine Frage: warum crsht es dann an ganz anderen Enden des Porgramms, sogar in anderen Threads? Wenn auf nicht bessenen Speicher zugegriffen wird, dann müsste es doch sofort bei der erstellung einer instanz crashen...
Die geposte Subklasse erbt doch alle Methoden der ursprünglichen. Überschrieben werden nur ein paar wenige. Aber die anderen gibt es noch und sie werden auch ausgeführt (sonst hättest Du ja einfach eine neue Klasse schreiben können).
Soweit ich es sehe ist z.B. -dealloc NICHT dabei.
Also wird ggf. das ursprüngliche dealloc aufgerufen.
Und das sieht meist so aus
- (void) dealloc { [_var1 release]; [_var2 release]; [super dealloc]; }
Und nun hast Du eine posende Klasse bei der es _var2 nicht gibt. Dann geht _release an einen ungültigen Pointer. Das muss aber nicht zwangsläufig zu einem sofortigen Fehler führen, abhängig davon was da gerade im Speicher steht. Und das kann auch ein gültiges anderes Objekt sein, das auf einmal einen release zuviel bekommt.
Beim init wird zwar auf _var2 geschrieben, was damit vielleicht den Anfang einer anderen Instanz beschädigt, aber das merkt man erst wenn man diese benutzt (z.B. durch einen autorelease).
Damit ist m.E. erklärt warum die geposte Subklasse nicht weniger sondern sogar exakt die gleichen Instanzvariablen haben muß. Warum sie aber nicht mehr haben darf, leuchtet mich auch nicht ein.
Wo ich das schreibe fällt mir auf dass ich genau das in seltenen Fällen sogar schon gemacht habe (eine Art Instanzvariablen-Category), weil es mir bisher nicht als Einschränkung bewußt war. Probleme sind mir nicht aufgefallen.
-- hns