Skip to content

Instantly share code, notes, and snippets.

@ChristianKienle
Created July 22, 2012 12:06
Show Gist options
  • Select an option

  • Save ChristianKienle/3159486 to your computer and use it in GitHub Desktop.

Select an option

Save ChristianKienle/3159486 to your computer and use it in GitHub Desktop.
@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