Mit Xcode 6.3 wurden neue Annotationen eingeführt, um die Intention von APIs in Objective-C besser zum Ausdruck zu bringen (und natürlich eine bessere Swift-Unterstützung sicherzustellen). Diese Anmerkungen waren natürlich nonnull
, nullable
und null_unspecified
.Unterschied zwischen Nullable, __nullable und _Nullable in Objective-C
Aber mit Xcode 7 gibt es viele Warnungen erscheinen, wie zum Beispiel:
Pointer is missing a nullability type specifier (_Nonnull, _Nullable or _Null_unspecified).
Zusätzlich zu, dass Apple eine andere Art von NULL-Zulässigkeit Bezeich verwendet, deren C-Code-Kennzeichnung (source):
CFArrayRef __nonnull CFArrayCreate(
CFAllocatorRef __nullable allocator, const void * __nonnull * __nullable values, CFIndex numValues, const CFArrayCallBacks * __nullable callBacks);
Also, um es zusammenzufassen, haben wir nun diese drei verschiedenen NULL-Zulässigkeit Anmerkungen:
nonnull
,nullable
,null_unspecified
_Nonnull
,_Nullable
,_Null_unspecified
__nonnull
,__nullable
,__null_unspecified
Auch wenn ich weiß, warum und wo die Anmerkung zu verwenden, ich bin durch die leicht verwirrt Art von Anmerkungen sollte ich verwenden, wo und warum. Das ist, was ich sammeln konnte:
- Für Eigenschaften sollte ich
nonnull
,nullable
,null_unspecified
verwenden. - Für Methodenparameter sollte ich
nonnull
,nullable
,null_unspecified
verwenden. - Für C-Methoden sollte ich
__nonnull
,__nullable
,__null_unspecified
verwenden. - Für andere Fälle, wie Doppelzeiger sollte ich
_Nonnull
,_Nullable
,_Null_unspecified
verwenden.
Aber ich bin verwirrt immer noch, warum wir so viele Anmerkungen haben, die im Grunde das gleiche tun.
Also meine Frage ist:
Was zwischen diesen Anmerkungen genauer Unterschied ist, wie man richtig um sie zu platzieren und warum?
Ich habe diesen Beitrag gelesen, aber es erklärt nicht den Unterschied und warum wir jetzt 3 verschiedene Arten von Anmerkungen haben und ich möchte wirklich verstehen warum Sie fügten den dritten Typ hinzu. – Legoless
Das hilft nicht wirklich @ Cy-4AH und Sie wissen es. :) – Legoless
@Legoless, bist du sicher, dass du es sorgfältig gelesen hast? es erklärt genau, wo und wie Sie sie verwenden sollten, was sind die geprüften Bereiche, wenn Sie den anderen für bessere Lesbarkeit, Kompatibilitätsgründe, etc, etc ... verwenden können Sie nicht wissen, was Sie wirklich gerne fragen, aber die Antwort ist eindeutig unter dem Link. es ist vielleicht nur ich, aber ich glaube nicht, dass eine weitere Erklärung notwendig wäre, um ihren Zweck zu erklären, diese einfache Erklärung hier zu kopieren und einzufügen, da eine Antwort hier wirklich peinlich wäre, denke ich. :( – holex