Created
July 22, 2012 12:06
-
-
Save ChristianKienle/3159486 to your computer and use it in GitHub Desktop.
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| @property (nonatomic, strong) NSString *name; | |
| // @synthesize name = _name; erzeugt in etwa folgenden Code: | |
| - (void)setName:(NSString *)name { | |
| // zuerst retain, dann release, dann Zuweisung | |
| [name retain]; | |
| [_name release]; | |
| _name = name; | |
| } | |
| // Im Gegensatz: | |
| @property (nonatomic, assign) NSString *name; | |
| // @synthesize name = _name; erzeugt in etwa folgenden Code: | |
| - (void)setName:(NSString *)name { | |
| // einfach nur eine Zuweisung, ohne Speichermanagement/Referenzzählung | |
| _name = name; | |
| } | |
| /* | |
| strong/retain/copy Properties sorgen dafür, dass übergebene Objekt nicht einfach so "abhauen" kann. Wenn du assign/weak nutzt, dann kann das übergebene Objekt "verschwinden", ohne dass du davon etwas mitbekommst. Im Falle von assign musst du da sehr aufpassen, da du einen Dangling pointer hast. Nutze immer wenn möglich weak statt assign. Bei weak wird der Pointer beim Verschwinden automatisch ge-nillt. | |
| Weitere Faustregeln: | |
| Nutze bei Eigenschaften vom Typ NSString, NSValue, NSNumber, NSArray, NSSet, NSDictionary immer @property (nonatomic, copy) | |
| Für Delegates nimmst du immer weak. | |
| Outlets auf Top-Level-Objekte sollten strong sein. Auf Nicht-Top-Level-Objekte (zum Beispiel von File's Owner auf irgendwelche Subviews sollten weak sein. | |
| Für alles andere erstmal @property (nonatomic, strong). | |
| Aber es hängt auch oft vom Einzelfall ab. Am besten an die o.g Faustregeln halten und nochmal das Kapitel Memory-Management lesen. :) | |
| */ |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment