2012-09-20 10 views
21

Ich habe gerade die neue Version von Xcode/ios6 installiert. viewDidUnload wird jetzt abgeschrieben.viewDidUnload nicht mehr in ios6 aufgerufen

Im Apfel doc,

ViewDidUnload [...] Veraltete in iOS 6.0. Ansichten werden nicht mehr unter Bedingungen mit wenig Arbeitsspeicher gelöscht und daher wird diese Methode nie aufgerufen.

Aber Zahlen von Anwendungen verwenden diesen Rückruf ihre Eigenschaften zu lösen, wie:

- (void)viewDidUnload { 
    [super viewDidUnload]; 

    self.recipientButton = nil; 
    self.connectButton = nil; 
    self.infoLabel = nil; 
} 

Dies war die beste Praxis Ihre IBOutlets zu lösen.

Also, erste Frage:
Was diese bestehenden Apps in iOS 6 passieren wird? Werden sie lecken?

und zweite:
Was ist der neue empfohlene Weg, um eine IBOutlet Eigenschaft zu veröffentlichen? In Dealloc-Methode?

Antwort

22

Zur ersten Frage:

Ihre Viewcontroller werden didReceiveMemoryWarning Methode Rückruf erhalten und Sie können

in diesem Verfahren aus der Sicht & anderen Komponenten nil

Für Referenz Do Check WWDC 2012 Video Session auf ENTWICKLUNG DER Controller-Ansicht , für den Fall, dass Sie nicht (ich glaube, sie sind nur für registrierte Entwickler verfügbar, aber nicht sicher).

Antwort auf Ihre zweite.

[Objektfreigabe]; in dealloc. Keine Notwendigkeit, dem Objekt vor dem Loslassen Nil zuzuweisen.

+0

Danke für Ihre Antwort. In der Tat bin ich mehr daran interessiert, die erste Frage zu stellen. Aber wie http://stackoverflow.com/a/9281416/127493 sagt (zum Beispiel gibt es Zahlen von anderen Themen auf), sollten IBOutlet Eigenschaften in viewDidUnload in früheren Best Practice veröffentlicht werden. – Martin

+0

@martin Bitte überprüfen Sie die bearbeitete Antwort –

+0

Natürlich ist '[Objekt release];' in dealloc nur möglich, wenn Sie ARC * nicht * ausführen. –

9

empfehle ich Ihnen für die IBOutlets schwache Eigenschaft zu verwenden wie

@property (weak) IBOutlet UILabel * labelText; 

Auf diese Weise brauchen Sie nicht alles in dealloc zu tun. In iOS 6 wird einfach ViewDidUnload nicht aufrufen, iOS5 oder früher ist es nur Anruf, wenn Speicher Warnung aufgetreten sind.

1

und zweite: Was ist die neue empfohlene Möglichkeit, eine IBOutlet Eigenschaft zu veröffentlichen? In Dealloc-Methode?

Was ist der "alte" empfohlene Weg? Sie müssen beibehaltene Instanzvariablen immer in dealloc freigeben; Es war schon immer so und so weiter.

Es war genau das in viewDidUnload (die nur für wenig Speicher genannt wird), könnten Sie auch-nil Ihre Eigenschaften festgelegt.

Verwandte Themen