Wraz z Xcode 6.3 wprowadzono nowe adnotacje, aby lepiej wyrazić zamiar API w Objective-C (i oczywiście w celu zapewnienia lepszej obsługi Swift). Adnotacje te były oczywiście nonnull, nullablei null_unspecified.
Ale w przypadku Xcode 7 pojawia się wiele ostrzeżeń, takich jak:
We wskaźniku brakuje specyfikatora typu dopuszczalności wartości null (_Nonnull, _Nullable lub _Null_unspecified).
Oprócz tego Apple używa innego typu specyfikatorów wartości null, oznaczając ich kod C ( źródło ):
CFArrayRef __nonnull CFArrayCreate(
CFAllocatorRef __nullable allocator, const void * __nonnull * __nullable values, CFIndex numValues, const CFArrayCallBacks * __nullable callBacks);
Podsumowując, mamy teraz te 3 różne adnotacje dopuszczalności wartości zerowej:
nonnull,nullable,null_unspecified_Nonnull,_Nullable,_Null_unspecified__nonnull,__nullable,__null_unspecified
Mimo że wiem, dlaczego i gdzie użyć której adnotacji, trochę się pogubiłem, jakiego typu adnotacje mam użyć, gdzie i dlaczego. Oto, co mogłem zebrać:
- Dla właściwości należy używać
nonnull,nullable,null_unspecified. - Dla parametrów metody należy używać
nonnull,nullable,null_unspecified. - Dla metod C powinno się używać
__nonnull,__nullable,__null_unspecified. - W innych przypadkach, takich jak podwójne wskaźniki należy używać
_Nonnull,_Nullable,_Null_unspecified.
Ale wciąż nie wiem, dlaczego mamy tak wiele adnotacji, które zasadniczo robią to samo.
Więc moje pytanie brzmi:
Jaka jest dokładna różnica między tymi adnotacjami, jak je poprawnie umieścić i dlaczego?
