Bei Verwendung von Xcode 4.2 und ARC stelle ich fest, dass der automatisch generierte Code für ein NSManagedObject
Standbild für Eigenschaften wie folgt lautet:
@property (nonatomic, retain) NSString * someString;
1) Sollte retain
jetzt nicht durch strong
oder ersetzt werden weak
?
2) Warum wird der automatisch generierte Code immer noch verwendet? retain
3) Wofür ist der richtige Ersatz retain
in dieser Eigenschaftserklärung?
Ich debugge gerade ein Problem mit NSFetchRequest
und dachte, dies könnte die Ursache des Problems sein. Gedanken?
Antworten:
Nein. Sie können Retain nicht durch schwach ersetzen. Sie sind anders. Und stark ist ein 100% iges Synonym für behalten; sie sind identisch. Sie können beides verwenden, daher gibt es hier kein "sollte". Sie können Retain durch Strong ersetzen, wenn Sie möchten, müssen dies aber nicht.
Warum nicht? Siehe (1). Beibehalten ist korrekt, daher gibt es kein Problem.
Es ist nicht erforderlich, die Halterung zu ersetzen.
Ist es nicht.
quelle
__strong
an anderen Stellen in Ihrem Code befinden (es gibt keine__retain
), möchten Sie möglicherweise aus Gründen derstrong
Konsistenz zu using wechseln . Dies ähnelt dem konsistenten Einrücken Ihres Codes, auch wenn der Code ohne diesen Code einwandfrei funktioniert.Alle drei Fragen in einer beantworten:
retain
undstrong
sind synonym miteinander, also sind beide richtig. In der Dokumentation heißt esquelle
retain
s instrong
s konvertiert . Mein Eindruck ist also, dass diesstrong
das bevorzugte Attribut ist, aber der NSManagedObject-Generator wurde nicht aktualisiert. Aber das ist nur eine Vermutung; Vielleicht hält niemand bei Apple die Unterscheidung für wichtig.Vor ARC müssen Sie ein Objekt freigeben, das beibehalten wird. Das heißt behalten hat Gegenstück. Nach ARC müssen Sie nicht freigeben. Also stark verwenden. Es ist ein visueller Hinweis, den Sie nicht als Release bezeichnen müssen.
quelle
"behalten" ist gleich "stark".
"stark" wird zum Beispiel verwendet:
@property (nonatomic, strong) NSString * someString;
Und "__strong" wird zum Beispiel verwendet:
-(void) someMethod { __strong NSString* vStr = [[NSString alloc] initWithString:@"some string"]; }
Auf Apple Docs. sagt:
Eigenschaftsattribute
Die Schlüsselwörter schwach und stark werden als neue deklarierte Eigenschaftsattribute eingeführt, wie in den folgenden Beispielen gezeigt.
// The following declaration is a synonym for: @property(retain) MyClass *myObject; property(strong) MyClass *myObject;
Apple doc. http://developer.apple.com/library/ios/#releasenotes/ObjectiveC/RN-TransitioningToARC/Introduction/Introduction.html
quelle