À propos des variables d'instance privé en Objective-C
Dans xCode 3, j'ai défini des variables d'instance privé dans une classe. Quand je accéder directement aux variables privées dans les codes du client, pourquoi ne le compilateur juste de me montrer un avertissement, pas une erreur? Le code peut s'exécuter. L'avertissement dit que cela peut-être une erreur matérielle dans l'avenir. Ce qui ne l ' "erreur matérielle" signifie? Merci.
Vous devez vous connecter pour publier un commentaire.
Dur d'Erreur signifie que dans le futur le compilateur va se comporter de la façon dont vous vous attendez à se comporter (c'est à dire, de ne pas compiler le fichier source lorsque vous avez directement accès à une variable d'instance en dehors de la définition de la visibilité de la portée).
Dès maintenant le compilateur n'est pas simplement l'application Objective-C les restrictions de visibilité. L'avertissement est là, cependant, pour vous rappeler que vous êtes en train de faire quelque chose que vous ne devriez pas faire, et vous attirer l'attention pour que, dans le cas où vous l'ai fait par accident.
Si j'avais à spéculer sur le pourquoi de la visibilité n'est pas forcée, je dirais qu'avec tous les sans-frais de transition choses entre la Fondation de la bibliothèque et de la CoreFoundation de la bibliothèque, il y a probablement une quantité décente de bibliothèque de code qui accède aux variables d'instance qui, à strictement parler, ne doit pas être visible.
En général, c'est une mauvaise idée pour accéder directement à la variable d'instance, de toute façon. Tant que vous pouvez utiliser Obj-C 2.0, il est probablement préférable d'utiliser quelque chose comme propriétés si vous êtes en train de concevoir un pur modèle de données objet.
Bien, la grosse erreur serait de dire qu'il deviendra une erreur dans l'avenir plutôt que d'un avertissement. Quant à savoir pourquoi c'est un avertissement maintenant, je ne suis pas sûr. J'imagine que c'est pour la même raison que lorsque vous essayez d'appeler une méthode qui n'existe pas sur une classe, qui est également à seulement un avertissement.