2010-04-18 13 views
7

Manchmal muss ich herausfinden, ob ein Objekt wirklich freigegeben wird. Ich konnte Instrumente natürlich verwenden, aber das braucht viel Zeit, und ich habe in Millionen von Objekten zu suchen, so habe ich dies zu tun:Ist es sicher, `release` für das Debuggen zu überschreiben?

-(void)release { 
    NSLog(@"I'm released"); 
    [super release]; 
} 

Aber das Problem ist: dies sicher ist zu tun? Kann ich irgendwelche Probleme bekommen, wenn ich -(void)release überschreibe. Ist es wirklich void? Und was, wenn ich meine Bewerbung für den Vertrieb erstelle, aber pro Unfall lass es da? Oder ist es nur sicher? Danke

+0

Was meinst du mit "wirklich veröffentlicht"? Denkst du, dass [foo release] manchmal nicht dazu führt, dass die Release-Nachricht gesendet wird? – JeremyP

+0

@ JeremyP '[[[foo alloc] init] Autorelease];' ?? –

+0

Ich sehe. Sie möchten nicht sehen, ob die Freigabemethode funktioniert, aber ob das Objekt jemals freigegeben wird. Es kann viele Male im Laufe seiner Lebensdauer beibehalten und freigegeben werden, so dass das Debugging der Release-Methode wahrscheinlich nicht so nützlich ist. Sie möchten wahrscheinlich die Antwort von Laurent Etiemble unten sehen. – JeremyP

Antwort

19

Es ist in Ordnung, aber bitte beschränken Sie es nur für das Debuggen.


Es ist nicht void, aber oneway void.

-(oneway void)release { 
    NSLog(@"I'm released"); // <-- remeber the @. 
    [super release]; 
} 

Beachten Sie, dass, wenn Sie dies für NSObject außer Kraft setzen, dann sind die -release Nachrichten zu „gebührenfrei überbrückte Container“ gesendet (zB NSCFArray, etc.) wird uns fehlen, da sie auch -release außer Kraft gesetzt haben, um zu übermitteln CFRelease.

+3

+1 für die Erwähnung von 'oneway void' – Eonil

5

Die Freigabenachricht verringert nur den Referenzzähler der Instanz.

Wenn Sie wissen wollen, ob die Instanz freigegeben wurde, dann ist die beste, die dealloc Nachricht außer Kraft zu setzen:

- (void)dealloc { 
    NSLog(@"I am deallocated"); 
    [super dealloc]; 
} 

vernünftig verwenden.

Verwandte Themen