ด้วย Xcode 6.3 มีการเพิ่มคำอธิบายประกอบใหม่เพื่อแสดงเจตนาของ API ในObjective-C ได้ดีขึ้น (และเพื่อให้แน่ใจว่ารองรับ Swift ได้ดีขึ้นแน่นอน) คำอธิบายประกอบเหล่านั้นเป็นของหลักสูตรnonnull
, และnullable
null_unspecified
แต่ด้วย Xcode 7 มีคำเตือนปรากฏขึ้นมากมายเช่น:
ตัวชี้ไม่มีตัวระบุประเภท nullability (_Nonnull, _Nullable หรือ _Null_unspecified)
นอกจากนั้น Apple ยังใช้ตัวระบุความสามารถในการทำให้เป็นโมฆะอีกประเภทหนึ่งโดยทำเครื่องหมายรหัส C (ที่มา ):
CFArrayRef __nonnull CFArrayCreate(
CFAllocatorRef __nullable allocator, const void * __nonnull * __nullable values, CFIndex numValues, const CFArrayCallBacks * __nullable callBacks);
ดังนั้นเพื่อสรุปตอนนี้เรามีคำอธิบายประกอบแบบ nullability ที่แตกต่างกัน 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
แต่ฉันก็ยังงงว่าทำไมเราถึงมีคำอธิบายประกอบมากมายที่ทำในสิ่งเดียวกัน
ดังนั้นคำถามของฉันคือ:
อะไรคือความแตกต่างที่แน่นอนระหว่างคำอธิบายประกอบเหล่านั้นวิธีการวางอย่างถูกต้องและทำไม