La différence entre les valeurs null, __nullable et _Nullable en Objective-C

Avec Xcode 6.3 il y avait de nouvelles annotations introduites pour mieux exprimer l'intention de l'API dans Objective-C (et pour assurer une meilleure Swift support de cours). Ces annotations ont été bien sûr nonnull, nullable et null_unspecified.

Mais avec Xcode 7, il y a beaucoup de mises en garde apparaissant comme:

Pointeur manque une possibilité de valeur null spécificateur de type (_Nonnull, _Nullable ou _Null_unspecified).

En plus de cela, Apple utilise un autre type de possibilité de valeur null prescripteurs, marquant leur code C (source):

CFArrayRef __nonnull CFArrayCreate(
CFAllocatorRef __nullable allocator, const void * __nonnull * __nullable values, CFIndex numValues, const CFArrayCallBacks * __nullable callBacks);

Donc, pour résumer, nous avons maintenant ces 3 différentes possibilité de valeur null annotations:

  • nonnull, nullable, null_unspecified
  • _Nonnull, _Nullable, _Null_unspecified
  • __nonnull, __nullable, __null_unspecified

Même si je sais pourquoi et où l'utilisation d'annotation, je suis un peu confus par type d'annotations dois-je utiliser, où et pourquoi. C'est ce que j'ai pu recueillir:

  • Pour les propriétés que je devrais utiliser nonnull, nullable, null_unspecified.
  • Pour les paramètres de la méthode que je devrais utiliser nonnull, nullable, null_unspecified.
  • Pour des méthodes C que je devrais utiliser __nonnull, __nullable, __null_unspecified.
  • Pour d'autres cas, tels que les doubles pointeurs que je devrais utiliser _Nonnull, _Nullable, _Null_unspecified.

Mais je suis encore confus quant à pourquoi nous avons tellement de nombreuses annotations qui, en gros, faire la même chose.

Donc ma question est:

Quelle est la différence exacte entre ces annotations, comment mettre correctement en place, et pourquoi?

  • J'ai lu ce poste, mais il n'explique pas la différence et pourquoi nous avons 3 types d'annotations maintenant et j'ai vraiment envie de comprendre pourquoi ils sont allés sur l'ajout du troisième type.
  • Ce n'est vraiment pas aider @Cy-4AH et vous le savez. 🙂
  • êtes-vous sûr que vous avez lu attentivement? il explique précisément où et comment vous devez les utiliser, ce sont les états étendues, lorsque vous pouvez utiliser l'autre pour une meilleure lisibilité, des raisons de compatibilité, etc, etc... vous pourriez ne pas savoir ce que vous aimez vraiment à poser, mais la réponse est clairement sous le lien. c'est peut-être juste moi, mais je ne pense pas que toute explication supplémentaire serait nécessaire pour expliquer leur usage, de copier et de coller cette simple explication ici réponse ici serait vraiment bizarre, je suppose. 🙁
  • Il est clair certaines parties, mais non, je ne comprends toujours pas pourquoi nous n'avons pas que la première des annotations. Il n'explique pourquoi ils sont allés de l' __nullable à _Nullable, mais pas pourquoi avons-nous besoin _Nullable, si nous avons nullable. Et elle n'a pas d'expliquer pourquoi Apple utilise toujours __nullable dans leur propre code.
InformationsquelleAutor Legoless | 2015-09-08