ด้วย Xcode 6.3 มีการเพิ่มคำอธิบายประกอบใหม่เพื่อแสดงเจตนาของ API ในObjective-C ได้ดีขึ้น (และเพื่อให้แน่ใจว่ารองรับ Swift ได้ดีขึ้นแน่นอน) คำอธิบายประกอบเหล่านั้นเป็นของหลักสูตรnonnull, และnullablenull_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, ,nullablenull_unspecified - สำหรับพารามิเตอร์วิธีการที่ฉันควรใช้
nonnull, ,nullablenull_unspecified - สำหรับวิธีการ C ฉันควรใช้
__nonnull, ,__nullable__null_unspecified - สำหรับกรณีอื่น ๆ เช่นตัวชี้คู่ฉันควรใช้
_Nonnull, ,_Nullable_Null_unspecified
แต่ฉันก็ยังงงว่าทำไมเราถึงมีคำอธิบายประกอบมากมายที่ทำในสิ่งเดียวกัน
ดังนั้นคำถามของฉันคือ:
อะไรคือความแตกต่างที่แน่นอนระหว่างคำอธิบายประกอบเหล่านั้นวิธีการวางอย่างถูกต้องและทำไม
