Xcode 6.3 ile API'lerin Objective-C'deki niyetini daha iyi ifade etmek (ve elbette daha iyi Swift desteği sağlamak için) için yeni ek açıklamalar getirildi . Bu açıklamalar elbette vardı nonnull
, nullable
ve null_unspecified
.
Ancak Xcode 7 ile aşağıdakiler gibi birçok uyarı ortaya çıkıyor:
İşaretçinin bir sıfırlanabilirlik türü belirticisi eksik (_Nonnull, _Nullable veya _Null_unspecified).
Buna ek olarak, Apple, C kodlarını ( kaynak ) işaretleyen başka bir tür nullabilite belirteci kullanır :
CFArrayRef __nonnull CFArrayCreate(
CFAllocatorRef __nullable allocator, const void * __nonnull * __nullable values, CFIndex numValues, const CFArrayCallBacks * __nullable callBacks);
Özetle, şu 3 farklı sıfırlanabilirlik notuna sahibiz:
nonnull
,nullable
,null_unspecified
_Nonnull
,_Nullable
,_Null_unspecified
__nonnull
,__nullable
,__null_unspecified
Hangi ek açıklamayı neden ve nerede kullanacağımı bilsem de, hangi ek açıklamaları kullanmam gerektiğini, nerede ve neden biraz kafam karışıyor. Toplayabileceğim şey bu:
- Kullanmalıyım özellikleri için
nonnull
,nullable
,null_unspecified
. - Kullanmalıyım yöntem parametreler için
nonnull
,nullable
,null_unspecified
. - Kullanmalıyım C yöntemleri için
__nonnull
,__nullable
,__null_unspecified
. - Böyle kullanmalıyım çift işaretçiler gibi diğer durumlarda, için
_Nonnull
,_Nullable
,_Null_unspecified
.
Ama neden aynı şeyi yapan çok fazla ek açıklamaya sahip olduğumuz konusunda hala kafam karıştı.
Benim sorum şu:
Bu ek açıklamalar arasındaki kesin fark nedir, nasıl doğru yerleştirilir ve neden?