wake-up-neo.com

iOS 5 Best Practice (Release / Retain?)

Was ist die beste Vorgehensweise, um Apps für iOS 5 oder ältere Versionen zu schreiben? Soll ich die Freigabe/Aufbewahrung von Daten weiterhin verwenden oder sollte ich das ignorieren? Ist das wichtig?

109
Geekgirl

Es liegt an dir. Sie können Apps mit ARC (Automatic Reference Counting) schreiben, und Xcode schreibt "Klebercode", damit Ihre ARC-fähigen Apps unter iOS 4 ausgeführt werden können, ohne dass Änderungen erforderlich sind. Bestimmte Dinge funktionieren jedoch nicht, und auffällig viele Bibliotheken, die Sie möglicherweise verwenden möchten, verursachen (manchmal) unzählige Fehler, und Sie können sie erst verwenden, wenn die Entwickler ein mit ARC kompatibles Update veröffentlichen.


Edit: Ich habe kürzlich festgestellt, dass Sie ARC auf Dateibasis deaktivieren können. Siehe pixelfreak s Antwort . Mein Rat bleibt also bestehen, aber jetzt sollten die Bibliotheken von Drittanbietern nicht aktualisiert werden müssen, um mit ARC zu arbeiten.

Folgendes sagt Apple zum Deaktivieren von ARC für bestimmte Dateien:

Wenn Sie ein Projekt zur Verwendung von ARC migrieren, wird das Compiler-Flag -fobjc-arc als Standard für alle Objective-C-Quelldateien festgelegt. Sie können ARC für eine bestimmte Klasse deaktivieren, indem Sie das Compiler-Flag -fno-objc-arc für diese Klasse verwenden. Öffnen Sie in Xcode auf der Registerkarte Ziel-Build-Phasen die Gruppe Compile Sources (Quellen kompilieren), um die Liste der Quelldateien anzuzeigen. Doppelklicken Sie auf die Datei, für die Sie das Flag setzen möchten, geben Sie -fno-objc-arc in das Popup-Fenster ein und klicken Sie dann auf Fertig.

enter image description here

Siehe die vollständige Übergangsanleitung hier .

99
sudo rm -rf

Für alle, die immer noch neugierig sind, wie man ARC für einzelne Dateien ausschaltet, habe ich Folgendes getan:

  1. Gehen Sie zu Ihren Projekteinstellungen unter Build Phases > Compile Sources
  2. Wählen Sie die Dateien aus, für die ARC deaktiviert werden soll, und fügen Sie Compiler-Flags - fno-objc-arc hinzu. Sie können Flags für mehrere Dateien auf einmal setzen, indem Sie die Dateien auswählen und dann die Eingabetaste drücken.

Ich weiß nicht, ob dies der empfohlene Weg ist, aber er funktioniert bei mir.

PS: Ich habe diese Informationen von clang.llvm.org hier gesammelt, das öffentlich zugänglich ist, also nicht unter NDA.

171
pixelfreak

iOS 5 steht noch unter einem NDA und wird es wahrscheinlich sein, bis sie die öffentliche Version veröffentlichen. Wenn Sie ein Entwicklerkonto haben, gehen Sie zu Apple Developer Forums und fragen Sie dort.

Für frühere Versionen müssen Sie Referenzen zählen und entsprechend aufbewahren und freigeben. Lesen Sie die Speicherverwaltungsanleitung .

Bearbeiten: Hier ist eine öffentliche Spezifikation für die automatische Referenzzählung und ein Zitat aus öffentliche iOS 5-Seite =:

Mit der automatischen Referenzzählung (ARC) für Objective-C wird die Speicherverwaltung zur Aufgabe des Compilers. Wenn Sie ARC mit dem neuen Apple LLVM-Compiler aktivieren, müssen Sie nie wieder beibehalten oder freigeben, was den Entwicklungsprozess dramatisch vereinfacht und gleichzeitig Abstürze und Speicherlecks verringert. Der Compiler verfügt über ein umfassendes Verständnis von Ihre Objekte und gibt jedes Objekt frei, sobald es nicht mehr verwendet wird, sodass Apps mit vorhersehbarer, reibungsloser Leistung so schnell wie nie zuvor ausgeführt werden.

10
nevan king

Die Details sind im Moment leicht/unter NDA=, aber Apple hat die automatische Referenzzählung (ARC) in iOS 5 implementiert, wie hier beschrieben: http://developer.Apple.com/technologies/ios5/

Wenn Sie mit dem iOS 5 SDK eine neue App in Xcode 4 entwickeln, können Sie die Zählung von Beibehaltungen und Freigaben ignorieren.

[edit] Sudo rm -rf macht einen guten Punkt; Die Bibliotheken von Drittanbietern können erheblich betroffen sein

4
Dominic

Es ist sicherlich die Wahl des Entwicklers oder des Teams. ARC (Automatic Reference Counter) hat die Dinge ein bisschen einfacher gemacht, indem der Speicher automatisch für Sie verwaltet wurde. Es wird freigegeben, beibehalten und gegebenenfalls freigegeben. Ich bin der Meinung, dass Sie Erfahrung in der Verwaltung des Speichers sammeln sollten, vorzugsweise in einer Testanwendung, wenn Sie dies noch nicht getan haben. Eine andere zu berücksichtigende Sache ist, ob Ihre Anwendung auf Bibliotheken von Drittanbietern basiert, die, wenn sie nicht in ARC konvertiert werden, die Kompilierung Ihrer Anwendung verhindern. Die Wahl hängt natürlich von der jeweiligen Situation ab.

3
Charles

Niemand erwähnte SystemConfiguration.framework? Bitte vergessen Sie nicht, es in Frameworks zu setzen. Ich habe erbärmlich mehrere Stunden damit verbracht, es zu realisieren.

3
ThinkChris

setzen Sie das Flag als -fno-objc-arc in den Projekteinstellungen> Phasen erstellen> Quellen kompilieren

0
Mubin Shaikh