emailconfirmed, nsInternRO, nsInternRW, Administrators
3,356
edits
(→Regeln) |
m (→ARC) |
||
Line 145: | Line 145: | ||
Seit dem LLVM 3.0 Compiler (enthalten im iOS 5 SDK) gibt es Automated Reference Counting, das auf Compiler-Ebene automatisiert retain-/release calls einfügt. Demnach müssen alle obigen Regeln eigentlich nicht mehr beachtet werden, was eine unglaubliche Erleichterung für den Programmierer darstellt. Die Kenntnis über die Speicherverwaltung ist zwar noch von Vorteil, aber man spart sehr viele Zeilen Code und die Gefahr eines Programmabsturzes wird deutlich geringer. | Seit dem LLVM 3.0 Compiler (enthalten im iOS 5 SDK) gibt es Automated Reference Counting, das auf Compiler-Ebene automatisiert retain-/release calls einfügt. Demnach müssen alle obigen Regeln eigentlich nicht mehr beachtet werden, was eine unglaubliche Erleichterung für den Programmierer darstellt. Die Kenntnis über die Speicherverwaltung ist zwar noch von Vorteil, aber man spart sehr viele Zeilen Code und die Gefahr eines Programmabsturzes wird deutlich geringer. | ||
Arc besteht im Prinzip aus | Arc besteht im Prinzip aus nur wenigen Schlüsselwörtern. Bis auf __weak sind dabei alle schon in ObjC vorhanden und daher abwärtskompatibel: | ||
* __strong | * __strong | ||
* __weak (>iOS5!) | * __weak (>iOS5!) | ||
* __unsafe_unretained | * __unsafe_unretained | ||
* __bridge | * __bridge ( inkl. __bridge_retained und __bridge_transfer) | ||
* __autoreleasing (@autorelease) | |||
=== Vorteile === | |||
* ARC ist ''kein'' Garage Collector, es passiert nichts zur Laufzeit | |||
* Der Code wird auf Compiler-Ebene optimiert und läuft daher '''schneller als vorher'''! | |||
* ARC ist zu iOS4 und Snow Leopard 10.6 abwärtskompatibel | |||
* Crash-Safe: deutlich weniger Abstürze wegen Speicherproblemen | |||
* Weniger Code | |||
* Der Programmierer kann sich auf das Wesentliche konzentrieren | |||
=== Beispiel Deklaration === | === Beispiel Deklaration === | ||
Line 167: | Line 176: | ||
...dieser Code mit ARC: | ...dieser Code mit ARC: | ||
<source lang="ObjC">MyObject : NSObject { | <source lang="ObjC">MyObject : NSObject { | ||
NSString | NSString __strong *myName; | ||
id<MyProtocol> | id<MyProtocol> __weak delegate; | ||
int myNumber; | int myNumber; | ||
} | } | ||
Line 191: | Line 200: | ||
=== Voraussetzungen === | === Voraussetzungen === | ||
Mindest-Voraussetzungen zum Einsatz von ARC: | Mindest-Voraussetzungen zum Einsatz von ARC: | ||
* Apple LLVM compiler 3.0 | * Apple LLVM compiler 3.0 | ||
** enhalten im iOS 5 SDK bzw. Mac OS X 10.5. SDK mit Xcode 4 | |||
* Bei bestehenden Projekten kann der Refactor-Assistent zum Migrieren genutzt werden (Achtung: u.U. muss das .git Verzeichnis temporär verschoben werden) | * Bei bestehenden Projekten kann der Refactor-Assistent zum Migrieren genutzt werden (Achtung: u.U. muss das .git Verzeichnis temporär verschoben werden) | ||