2017-11-19 10 views
1

Ich habe angefangen, Charts in meiner App zu platzieren. Anfangs habe ich dies mit CGMutablePath() gemacht, aber dann wurde es zu uns NSBezierPath() refaktoriert. Ich finde es verwirrend, was ich verwenden sollte, aber angesichts der "NS" in NSBezierPath() fragte ich mich, ob das der alte Weg ist und ich den CGMutable-Pfad verwenden sollte.Sollte ich CGMutablePath oder NSBezierPath verwenden?

Kann mir bitte jemand mitteilen, ob ich das eine oder das andere benutzen soll? Wenn es dann entweder ist, wie entscheiden Sie, welches zu verwenden? Für das, was ich tat, produzierte NSBezierPath einfacheren Code.

Ich bin mit SWIFT 4 und XCode 9

Dank Steven

+0

Weder ist veraltet oder angedeutet, bald veraltet zu sein. Also, meine Annahme wäre für Sie zu verwenden, was Sie denken, ist eine bessere Passform, einfacher/einfacher zu lesen/zu schreiben. – Alp

+0

Danke. Das ist gut zu wissen. –

Antwort

1

Der CG für Core-Grafik steht und der C-Stil-Grafik-API. Da es nicht objektorientiert ist, müssen Sie Zeiger für Dinge wie den Grafikkontext oder den CGPath übergeben, obwohl dies in Swift 3 mit etwas syntaktischem Zucker übertüncht wird, weil der Compiler dies für Sie erledigt und die API sogar objektorientiert erscheinen lässt obwohl es nicht ist (schauen Sie sich das objektive c gegen die schnelle Dokumentation für irgendeine CG-Funktion an, und Sie können den Unterschied deutlich sehen). Die NS-Funktionen sind die objektorientierten objektiven C-Wrapper um die CG-Funktionen herum. Sie sehen dies in vielen Apple-APIs, zum Beispiel CFString (die C-Version) und NSString (die Ziel-C-Version). Ich glaube, die Empfehlung von Apple besteht darin, die API der höchsten Ebene zu verwenden, es sei denn, Sie haben einen Grund, etwas anderes zu tun, obwohl diese Regel routinemäßig ignoriert wird. Zum Beispiel sehe ich fast immer Leute, die GCD verwenden, um auf den Hauptthread statt auf NSOperationQueue zuzugreifen. Verwenden Sie die API, die Sie mögen; Es ist nicht so wichtig, so schnell wie in Objective C, C oder C++.

+0

danke für die ausführliche Antwort. Es ist gut, die Gründe für die Dinge zu verstehen. –

Verwandte Themen