Với Xcode 6.3, đã có các chú thích mới được giới thiệu để thể hiện rõ hơn ý định của API trong Objective-C (và để đảm bảo tất nhiên hỗ trợ Swift tốt hơn). Những chú thích đó là tất nhiên nonnull
, nullable
và null_unspecified
.
Nhưng với Xcode 7, có rất nhiều cảnh báo xuất hiện như:
Con trỏ bị thiếu một công cụ xác định loại nullable (_Nonnull, _Nullable hoặc _Null_unspecified).
Ngoài ra, Apple sử dụng một loại công cụ xác định vô hiệu hóa khác, đánh dấu mã C ( nguồn ) của họ:
CFArrayRef __nonnull CFArrayCreate(
CFAllocatorRef __nullable allocator, const void * __nonnull * __nullable values, CFIndex numValues, const CFArrayCallBacks * __nullable callBacks);
Vì vậy, để tổng hợp, chúng tôi hiện có 3 chú thích vô hiệu khác nhau này:
nonnull
,nullable
,null_unspecified
_Nonnull
,_Nullable
,_Null_unspecified
__nonnull
,__nullable
,__null_unspecified
Mặc dù tôi biết tại sao và sử dụng chú thích nào, tôi hơi bối rối không biết nên sử dụng loại chú thích nào, ở đâu và tại sao. Đây là những gì tôi có thể thu thập:
- Đối với tài sản tôi nên sử dụng
nonnull
,nullable
,null_unspecified
. - Đối với các thông số phương pháp tôi nên sử dụng
nonnull
,nullable
,null_unspecified
. - Đối với phương pháp C tôi nên sử dụng
__nonnull
,__nullable
,__null_unspecified
. - Đối với các trường hợp khác, chẳng hạn như con trỏ double tôi nên sử dụng
_Nonnull
,_Nullable
,_Null_unspecified
.
Nhưng tôi vẫn bối rối không biết tại sao chúng ta có quá nhiều chú thích về cơ bản lại làm điều tương tự.
Vì vậy, câu hỏi của tôi là:
Sự khác biệt chính xác giữa các chú thích đó là gì, làm thế nào để đặt chúng chính xác và tại sao?