Con Xcode 6.3 sono state introdotte nuove annotazioni per esprimere meglio l'intenzione delle API in Objective-C (e per garantire un miglior supporto rapido, ovviamente). Quelle annotazioni erano ovviamente nonnull, nullablee null_unspecified.
Ma con Xcode 7, appaiono molti avvisi come:
Nel puntatore manca un identificatore del tipo di nullability (_Nonnull, _Nullable o _Null_unspecified).
Inoltre, Apple utilizza un altro tipo di identificatori di nullability, contrassegnando il loro codice C ( sorgente ):
CFArrayRef __nonnull CFArrayCreate(
CFAllocatorRef __nullable allocator, const void * __nonnull * __nullable values, CFIndex numValues, const CFArrayCallBacks * __nullable callBacks);
Quindi, per riassumere, ora abbiamo queste 3 diverse annotazioni di nullability:
nonnull,nullable,null_unspecified_Nonnull,_Nullable,_Null_unspecified__nonnull,__nullable,__null_unspecified
Anche se so perché e dove utilizzare quale annotazione, mi sto confondendo leggermente con quale tipo di annotazioni dovrei usare, dove e perché. Questo è ciò che potrei raccogliere:
- Per le proprietà devo usare
nonnull,nullable,null_unspecified. - Per i parametri del metodo devo usare
nonnull,nullable,null_unspecified. - Per i metodi C devo usare
__nonnull,__nullable,__null_unspecified. - Per gli altri casi, come ad esempio doppi puntatori devo usare
_Nonnull,_Nullable,_Null_unspecified.
Ma sono ancora confuso sul perché abbiamo così tante annotazioni che sostanzialmente fanno la stessa cosa.
Quindi la mia domanda è:
Qual è la differenza esatta tra quelle annotazioni, come posizionarle correttamente e perché?
