Ich habe eine iPhone-Anwendung entwickelt, die iOS4 und iOS5-basiertes iPhone / iPad unterstützen soll.
Meine Anwendung verliert Speicherplatz an wenigen Stellen, der aufgrund der Größe des Codes schwer zu debuggen ist. Ich habe kürzlich über ARC (Automatic Reference Counting) gelesen, meine Abfrage ist
Muss ich meinen Quellcode (retain / release / alloc / dealloc) ändern, um mit ARC zu kompilieren? Welche Änderungen müssen wir auch mit ARC durchführen?
ist es ratsam, zu ARC zu wechseln?
funktioniert meine App auf dem iOS4-Telefon, wenn ich ARC
danke.
Dies ist wahrscheinlich nicht der beste Ort, um diese Frage zu stellen, aber ich werde antworten, weil es mir nichts ausmacht, dass die Frage hier ist.
Sie verwenden das Migrationstool 'Bearbeiten & gt; Refaktor & gt; In Objective-C ARC umwandeln und alles reparieren, was das Werkzeug nicht herausfinden kann.
Ja.
Ja, aber schwache Referenzen werden nicht aufgelöst.
Ich denke definitiv, dass es für Programmierer gut ist, Speicherverwaltung zu verstehen und wie das System tatsächlich funktioniert ... aber ich denke, ARC ist ein sehr gutes System und funktioniert wirklich gut. Das ist wirklich eine Meinungsfrage, daher ist es meiner Meinung nach fast immer wert, neue Projekte zu starten, die auf iOS 5-Apps auf ARC abzielen, außer unter ganz bestimmten Umständen.
Ich denke, wenn Sie eine Menge C-Bibliotheken in Ihrem Code verwenden, ist ARC momentan etwas schwieriger zu verwenden (wenn Sie also hauptsächlich C-Bibliotheken von Drittanbietern und Dinge wie CoreFoundation verwenden) Überlegen Sie, ob es sinnvoll ist oder nicht), aber selbst wenn diese Bibliotheken größtenteils von Ihren Objective-C-Controllern isoliert sind, ist ARC immer noch gut.
Bei älteren Apps müssen Sie sich die App-Nutzung und -Muster ansehen. Wenn Sie viele Delegate-Methoden verwenden, da Sie keine schwachen Referenzen auf iOS 4 verwenden können, wird es etwas komplizierter und Sie müssen wahrscheinlich ARC- und Nicht-ARC-Code gemischt haben. Es könnte besser sein, eine Designentscheidung zu treffen, um mit ARC voranzukommen. Daher sind neue Funktionen für iOS 5 entwickelt worden und möglicherweise nicht verfügbar (oder vollständig verfügbar) in der iOS 4-Version der App, und diese verwenden ARC.
Wirklich, am Ende hängt es davon ab, wie Ihre Anwendung bereits entworfen wurde, wie groß sie ist und wie komfortabel Sie mit dem verwalteten Speichermanagement und der Nutzung / den Einschränkungen von ARC sind. Zum Beispiel habe ich drei Projekte, die ich nie in ARC konvertieren würde, eine, die ich gerade gemischt mache, eine, die komplett konvertiert ist (aber immer noch iOS 4+) und zwei, die voll sind - ARC und iOS 5+ nur.
Um klar zu sein, während Sie ARC-schwache Referenzen nicht verwenden können, wenn Sie iOS 4 als Ziel haben, können Sie > weiterhin unsafe_unretained
verwenden, was im Grunde der Verwendung von assign
für Objekt entspricht Eigenschaften. Das bedeutet, dass Sie jeden gut geschriebenen Nicht-ARC-Code in ARC konvertieren können, ohne unbeabsichtigte Aufbewahrungszyklen auf iOS 4 zu erstellen.
Wenn Sie unsafe_unretained
verwenden, verlieren Sie die automatische Null-Funktion von schwachen Referenzen, aber Sie erhalten immer noch alle anderen Vorteile von ARC, so dass Sie sich nicht darum sorgen müssen, dass Sie in Ihren Dealloc-Anweisungen usw. keine Ivars freigeben / p>
Tags und Links iphone ios memory-management automatic-ref-counting