2010-07-23 16 views
8

Ich erbte eine iPhone-App bei der Arbeit und ich bin neu in Objective-C, also habe ich mich noch nicht orientiert. Ich stieß auf ähnlichen Code:Sollte -dealloc etwas anderes tun, als Speicher freizugeben?

- (void) dealloc { 
    [[StaticObject sharedObject] showSomeDialog]; 

    [super dealloc]; 
} 

Ich weiß, dass dies in anderen Sprachen verpönt ist. Mein Spinnensinn wird verrückt, wenn er diesen Code betrachtet.

Ist dies ein gemeinsames Ziel-C-Idiom? Oder habe ich eine beschissene Codebasis, um es zu reparieren?

Antwort

7

Sie sollten den UI-Code nicht in einem -dealloc ablegen. Allgemeine Faustregel: Verwende -dealloc nur, um das zu bereinigen, was du getan hast: Objekte freigeben, Beobachter entfernen usw.

Überlegen Sie, was passieren würde, wenn dieses Objekt von einem anderen Thread als dem Hauptthread lebt ... jetzt Sie würden UI-Code auf dem Nicht-Haupt-Thread ausgeführt haben, die eine schlechte Sache ist.

+4

Kurze Version: "Ja, Sie haben vielleicht eine beschissene Codebasis zu reparieren." ;-) –

+1

Gut zu sehen, dass meine Intuition bestätigt ist. – ageektrapped

0

Sie können so etwas für einige Debugging-Gründe tun. Aber ich glaube nicht, dass du jemals so etwas tun solltest! Dies bedeutet, dass ein Dialog ausgelöst wird, wenn ein Objekt freigegeben wird. Wenn Sie also einen Mechanismus benötigen, um einen Dialog zu einem bestimmten Zeitpunkt anzuzeigen, müssen Sie ihn nicht von einem Objekt abhängig machen. In der Dealloc-Methode sollten Sie nur alle Objekte freigeben, die von dem freigegebenen Objekt beibehalten wurden. Und nicht einige ausgefallene Anwendungsfunktionen.

Verwandte Themen