С Xcode 6.3 были введены новые аннотации для лучшего выражения намерения API в Objective-C (и для обеспечения, конечно, более быстрой поддержки Swift). Эти аннотации были, конечно, nonnull
, nullable
и null_unspecified
.Разница между обнуляемыми, __nullable и _Nullable в Objective-C
Но с Xcode 7, есть много предупреждений, появляющихся, таких как:
Pointer is missing a nullability type specifier (_Nonnull, _Nullable or _Null_unspecified).
В дополнение к этому, Apple использует другой тип допустимость пустых спецификаторов, маркировка их C код (source):
CFArrayRef __nonnull CFArrayCreate(
CFAllocatorRef __nullable allocator, const void * __nonnull * __nullable values, CFIndex numValues, const CFArrayCallBacks * __nullable callBacks);
Таким образом, чтобы подвести итог, мы имеем теперь эти 3 различных допустимость пустых аннотаций:
nonnull
,nullable
,null_unspecified
_Nonnull
,_Nullable
,_Null_unspecified
__nonnull
,__nullable
,__null_unspecified
Даже если я знаю, почему и где использовать которые аннотацию, я получаю немного смущен, какой тип Аннотации следует использовать, где и почему. Это то, что я мог собрать:
- Для свойств следует использовать
nonnull
,nullable
,null_unspecified
. - Для параметров метода я должен использовать
nonnull
,nullable
,null_unspecified
. - Для методов C я должен использовать
__nonnull
,__nullable
,__null_unspecified
. - Для других случаев, таких как двойные указатели, я должен использовать
_Nonnull
,_Nullable
,_Null_unspecified
.
Но я все еще смущен тем, почему у нас так много аннотаций, которые в основном делают то же самое.
Так что мой вопрос:
Что такое точное различие между этими аннотациями, как правильно разместить их и почему?
Я прочитал этот пост, но он не объясняет разницу и почему у нас есть 3 разных типа аннотаций, и я действительно хочу понять, почему продолжал добавлять третий тип. – Legoless
Это действительно не помогает @ Cy-4AH, и вы это знаете. :) – Legoless
@ Нелегко, вы уверены, что внимательно прочитали его? он точно объясняет, где и как вы должны их использовать, каковы проверенные области, когда вы можете использовать другой для лучшей удобочитаемости, соображений совместимости и т. д. и т. д. ... вы можете не знать, что вы действительно хотите спросить, но ответ явно находится по ссылке. это, может быть, только я, но я не чувствую, что для объяснения их цели, копирования и вставки этого простого объяснения здесь будет объяснено, что ответ здесь будет действительно неудобным, я думаю. :( – holex