Avec Xcode 6.3, de nouvelles annotations ont été introduites pour mieux exprimer l'intention des API en Objective-C (et pour assurer un meilleur support Swift bien sûr). Ces annotations étaient bien sûr nonnull, nullableet null_unspecified.
Mais avec Xcode 7, de nombreux avertissements apparaissent tels que:
Le pointeur n'a pas de spécificateur de type de nullabilité (_Nonnull, _Nullable ou _Null_unspecified).
En plus de cela, Apple utilise un autre type de spécificateurs de nullabilité, 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 annotations de nullabilité différentes:
nonnull,nullable,null_unspecified_Nonnull,_Nullable,_Null_unspecified__nonnull,__nullable,__null_unspecified
Même si je sais pourquoi et où utiliser quelle annotation, je ne sais pas trop quel type d'annotations dois-je utiliser, où et pourquoi. Voici ce que je pourrais comprendre:
- 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 les méthodes C je devrais utiliser
__nonnull,__nullable,__null_unspecified. - Pour d' autres cas, comme doubles pointeurs que je devrais utiliser
_Nonnull,_Nullable,_Null_unspecified.
Mais je ne comprends toujours pas pourquoi nous avons tant d'annotations qui font essentiellement la même chose.
Ma question est donc:
Quelle est la différence exacte entre ces annotations, comment les placer correctement et pourquoi?
