Unterschied zwischen nullable, __nullable und _Nullable in Objective-C

Mit Xcode 6.3 es wurden neue annotations eingeführt, um besser mit dem Ausdruck der Absicht, die API ist in Objective-C (und damit eine bessere Rasche Unterstützung natürlich). Diese Anmerkungen wurden natürlich nonnullnullable und null_unspecified.

Aber mit Xcode 7, es gibt eine Menge von Warnungen erscheinen wie:

Zeiger fehlt, ist ein null-Zulässigkeit Typ Bezeichner (_Nonnull, _Nullable oder _Null_unspecified).

Zusätzlich zu, dass Apple verwendet eine andere Art von Bezeichner null-Zulässigkeit, Kennzeichnung Ihren C-code (Quelle):

CFArrayRef __nonnull CFArrayCreate(
CFAllocatorRef __nullable allocator, const void * __nonnull * __nullable values, CFIndex numValues, const CFArrayCallBacks * __nullable callBacks);

So, in der Summe haben wir jetzt diese 3 verschiedenen null-Zulässigkeit Anmerkungen:

  • nonnullnullablenull_unspecified
  • _Nonnull_Nullable_Null_unspecified
  • __nonnull__nullable__null_unspecified

Obwohl ich weiß, warum und wo die Anmerkung, ich bin immer etwas verwirrt, welche Art von Anmerkungen sollte ich verwenden, wo und warum. Dies ist, was ich sammeln konnte:

  • Für Eigenschaften sollte ich verwenden nonnullnullablenull_unspecified.
  • Für die Parameter der Methode, die ich verwenden sollte nonnullnullablenull_unspecified.
  • Für C-Methoden, die ich verwenden sollte __nonnull__nullable__null_unspecified.
  • Für andere Fälle, wie Doppel-Zeiger sollte ich verwenden _Nonnull_Nullable_Null_unspecified.

Aber ich bin immer noch verwirrt, warum wir so viele Anmerkungen, die im Grunde das gleiche tun.

Also meine Frage ist:

Was ist der genaue Unterschied zwischen diesen Anmerkungen, wie Sie sich richtig zu platzieren und warum?

InformationsquelleAutor der Frage Legoless | 2015-09-08

Schreibe einen Kommentar