Dengan Xcode 6.3 ada anotasi baru yang diperkenalkan untuk lebih mengekspresikan maksud API di Objective-C (dan untuk memastikan dukungan Swift yang lebih baik tentu saja). Penjelasan itu tentu saja nonnull
, nullable
dan null_unspecified
.
Tetapi dengan Xcode 7, ada banyak peringatan yang muncul seperti:
Pointer tidak memiliki specifier tipe nullability (_Nonnull, _Nullable atau _Null_unspecified).
Selain itu, Apple menggunakan jenis penentu nullability lain, menandai kode C ( sumber ) mereka:
CFArrayRef __nonnull CFArrayCreate(
CFAllocatorRef __nullable allocator, const void * __nonnull * __nullable values, CFIndex numValues, const CFArrayCallBacks * __nullable callBacks);
Jadi, singkatnya, kami sekarang memiliki 3 anotasi pembatalan yang berbeda ini:
nonnull
,nullable
,null_unspecified
_Nonnull
,_Nullable
,_Null_unspecified
__nonnull
,__nullable
,__null_unspecified
Meskipun saya tahu mengapa dan di mana harus menggunakan anotasi yang mana, saya agak bingung dengan jenis anotasi mana yang harus saya gunakan, di mana dan mengapa. Inilah yang bisa saya kumpulkan:
- Untuk properti saya harus menggunakan
nonnull
,nullable
,null_unspecified
. - Untuk metode parameter saya harus menggunakan
nonnull
,nullable
,null_unspecified
. - Untuk metode C saya harus menggunakan
__nonnull
,__nullable
,__null_unspecified
. - Untuk kasus lain, seperti ganda pointer saya harus menggunakan
_Nonnull
,_Nullable
,_Null_unspecified
.
Tetapi saya masih bingung mengapa kita memiliki begitu banyak anotasi yang pada dasarnya melakukan hal yang sama.
Jadi pertanyaan saya adalah:
Apa perbedaan persis antara anotasi tersebut, cara menempatkannya dengan benar dan mengapa?