En utilisant Xcode 4.2 et ARC, je remarque que le code généré automatiquement pour un NSManagedObject
se lit toujours comme ceci pour les propriétés:
@property (nonatomic, retain) NSString * someString;
1) Ne devrait-on pas remplacer retain
par strong
ou weak
?
2) Pourquoi le code généré automatiquement utilise-t-il retain
3) Quel est le remplacement correct de retain
dans cette déclaration de propriété?
Je suis en train de déboguer un problème en utilisant NSFetchRequest
, et j'ai pensé que cela pourrait être la source du problème. Pensées?
1) Ne devrait-on pas conserver maintenant être remplacé par fort ou faible?
Non. Vous ne pouvez pas remplacer la conservation par faible; ils sont différents. Et fort est un synonyme à 100% pour conserver; ils sont identiques. Vous pouvez utiliser l'un ou l'autre, donc il n'y a pas de "devrait" ici. Vous pouvez remplacer la conservation par forte si vous le souhaitez, mais ce n'est pas obligatoire.
2) Pourquoi le code généré automatiquement utilise-t-il toujours
Pourquoi pas? Voir (1). retenir est correct donc il n'y a pas de problème.
3) Quel est le remplacement correct à conserver dans cette déclaration de propriété?
Il n'est pas nécessaire de remplacer la conservation.
Je suis en train de déboguer un problème en utilisant NSFetchRequest, et j'ai pensé que cela pourrait être la source du problème. Pensées?
Ce n'est pas le cas.
Pour répondre à ces trois questions en une seule: retain
et strong
sont synonymes, donc les deux sont corrects. La documentation indique
retain
implique__strong
la possession
strong
implique__strong
la possession
Avant ARC, vous devez "libérer" un objet qui est conservé. Cela signifie que conserver a une contrepartie. Après ARC, vous n'avez pas besoin de libérer. Utilisez donc fort. C'est un indice visuel que vous n'avez pas besoin d'appeler libération.
"conserver" est égal à "fort".
"fort" est utilisé par exemple:
@property (nonatomic, strong) NSString * someString;
Et "__strong" est utilisé par exemple:
-(void) someMethod
{
__strong NSString* vStr = [[NSString alloc] initWithString:@"some string"];
}
Sur Apple Docs. Dit:
Attributs de propriété
Les mots clés faible et fort sont introduits en tant que nouveaux attributs de propriété déclarés, comme indiqué dans les exemples suivants.
// The following declaration is a synonym for: @property(retain) MyClass *myObject;
property(strong) MyClass *myObject;