Mit Xcode 6.3 wurden neue Anmerkungen eingeführt, um die Absicht von APIs in Objective-C besser auszudrücken (und natürlich um eine bessere Swift-Unterstützung zu gewährleisten). Diese Anmerkungen waren natürlich nonnull
, nullable
und null_unspecified
.
Bei Xcode 7 werden jedoch viele Warnungen angezeigt, z.
Dem Zeiger fehlt ein Nullfähigkeitstyp-Bezeichner (_Nonnull, _Nullable oder _Null_unspecified).
Darüber hinaus verwendet Apple einen anderen Typ von Nullabilitätsspezifizierern, die ihren C-Code ( Quelle ) markieren :
CFArrayRef __nonnull CFArrayCreate(
CFAllocatorRef __nullable allocator, const void * __nonnull * __nullable values, CFIndex numValues, const CFArrayCallBacks * __nullable callBacks);
Zusammenfassend haben wir nun diese 3 verschiedenen Annotationen zur Nullbarkeit:
nonnull
,nullable
,null_unspecified
_Nonnull
,_Nullable
,_Null_unspecified
__nonnull
,__nullable
,__null_unspecified
Obwohl ich weiß, warum und wo ich welche Annotation verwenden soll, bin ich etwas verwirrt darüber, welche Art von Annotationen ich wo und warum verwenden soll. Folgendes könnte ich sammeln:
- Für Eigenschaften sollte ich verwenden
nonnull
,nullable
,null_unspecified
. - Für Methodenparameter sollte ich
nonnull
,nullable
,null_unspecified
. - Für C Methoden , die ich verwenden sollte
__nonnull
,__nullable
,__null_unspecified
. - In anderen Fällen, wie zum Beispiel Doppelzeiger soll ich verwenden
_Nonnull
,_Nullable
,_Null_unspecified
.
Aber ich bin immer noch verwirrt darüber, warum wir so viele Anmerkungen haben, die im Grunde das Gleiche tun.
Meine Frage lautet also:
Was ist der genaue Unterschied zwischen diesen Anmerkungen, wie werden sie richtig platziert und warum?