La syntaxe est décrite dans la documentation -- voir Directives de mise en œuvre des biens .
La raison du changement du nom de la variable d'instance est précisément de décourager l'accès direct. Un trait de soulignement est utilisé par convention. (Remarque : Bien que le Directives de codage mettent actuellement en garde contre l'utilisation d'un trait de soulignement, ce conseil est dépassé).
Toujours selon la documentation (voir Utilisation des méthodes accesseurs ), en dehors des méthodes init et dealloc, vous devez toujours utiliser des méthodes d'accès. Vous utilisez les accesseurs set pour vous assurer que vous gérez correctement la mémoire et que vous émettez des notifications de changement KVO si nécessaire. Vous utilisez les accesseurs get pour vous assurer que la propriété est correctement initialisée. Il existe plusieurs endroits où les propriétés sont initialisées paresseusement ; si vous n'utilisez pas l'accesseur, vous obtenez nil...
Un exemple d'accès direct : En utilisant l'un des modèles de données de base, si vous avez utilisé :
NSFetchRequest *request = ...;
NSError *error = nil;
NSArray *results = [__managedObjectContext executeFetchRequest:request error:&error];
au lieu de
NSArray *results = [self.managedObjectContext executeFetchRequest:request error:&error];
alors -- parce que le contexte de l'objet géré est créé paresseusement dans la méthode de l'accesseur -- vous pourriez finir par envoyer un message à nil et n'obtenir aucun résultat.