Ich schreibe einen Objective-C-Code, der öffentlich verfügbar sein wird. Der Code besteht hauptsächlich aus bekannten Algorithmen, die von einer Optimierung profitieren würden. Ich plane, den größten Teil des Codes in C zu schreiben, um den Aufwand beim Erstellen von Objekten und der Speicherbereinigung zu reduzieren. Wird dies als schlechte Praxis angesehen?wird es als schlechte Praxis angesehen, c-Code in objective-c/cocoa framework zu schreiben?
Antwort
Nein, ist es nicht. Dies geschieht tatsächlich ziemlich häufig.
Im Allgemeinen tut man dies, wenn man zeitkritischen Code benötigt, um schneller zu laufen (alles andere gleich, ist das Aufrufen einer C-Funktion schneller als eine Objective-C-Methode).
In einigen anderen Fällen kann es jedoch auch schöner sein, C-Funktionen zu schreiben.
Denken Sie daran, dass Objective-C eine Obermenge von C ist. Alles, was C tun kann, kann Objective-C tun, und es sollte nicht als schlecht erachtet werden, etwas zu tun, was C tun kann. Es kann Fälle geben, in denen einige Dinge nicht erwünscht sind, aber trotzdem.
Vorzeitige Optimierung ist die Wurzel allen Übels
Ob es gute Praxis ist oder nicht, hängt ganz von der Anwendung. In den meisten Fällen würde ich sagen, schreibe es zuerst in Objective-C und benutze dann einen Profiler für die Optimierung, wenn es zu langsam ist.
Es gibt jedoch Fälle, in denen Sie wissen, dass Sie eine Optimierung vornehmen müssen, z. B. wenn Sie einen Sprachinterpreter oder eine CPU-Emulation schreiben. In diesen Fällen (und in Fällen, in denen Profiling einen Engpass aufweist) ist es vollkommen in Ordnung, reines C zu schreiben.
Nein, es ist nicht, Viele von Apples eigenen Frameworks sind meist C wie Core Graphics oder Accelerate. C ist sehr gut für Funktionen, die Sie viel verwenden und schnell ausführen müssen, wie mathematische Funktionen.
Es gibt Fälle, in denen ein OO-Modell, insbesondere mit Einzelversand, einfach keinen Sinn ergibt. Für eine allgemeine Funktion kann es keinen klaren bevorzugten "Empfänger" geben. Eine Sprache, die generische Multi-Dispatch-Funktionen unterstützt, wäre meine Präferenz, da eine solche Sprache sowohl das unterstützt, was die meisten Menschen für OO halten, als auch so viel mehr, als nur einfach alte C-Stil-Funktionen zu unterstützen.
- 1. Werden Ausgabeparameter als schlechte Praxis angesehen?
- 2. Warum werden globale Variablen als schlechte Praxis angesehen?
- 3. Wird mapM/sequenz als gute Praxis angesehen?
- 4. Wird es als schlechte Praxis angesehen, HTTP POST ohne Entity-Body auszuführen?
- 5. Wird get set Eigenschaften von C# als gute Praxis angesehen?
- 6. Warum wird 'for (var item in list)' mit Arrays in JavaScript als schlechte Praxis angesehen?
- 7. Ist CSS als HTML-Attribut schlechte Praxis?
- 8. Ist Versuch in einer Ansicht schlechte Praxis zu fangen?
- 9. Ist JavaScript als HTML-Attribut schlechte Praxis?
- 10. Ist es schlechte Praxis, auskommentierten Code in Produktionsfreigaben zu hinterlassen
- 11. Wie viele Klassen würden als "schlechte Praxis" betrachtet werden
- 12. Verwendet "out" schlechte Praxis
- 13. Warum wird es als schlecht angesehen, die Liste <T> freizulegen?
- 14. string = string.trim(); schlechte Praxis?
- 15. Schlechte Praxis, um 'sich selbst' zu behalten?
- 16. Was wird in mongoDB als Dokument angesehen?
- 17. Schnittstelle ohne Mitglieder - schlechte Praxis?
- 18. Wird es als guter Stil angesehen, den "neuen" Zeiger zu dereferenzieren?
- 19. Datenbank Upserts - Gute oder schlechte Praxis?
- 20. Verwenden Sie "Typ" als Attributname eine schlechte Praxis?
- 21. Warum wird SHA-1 als unsicher angesehen?
- 22. Warum wird eine Ladenladeschranke als teuer angesehen?
- 23. verwendet die Verknüpfung $() in jQuery schlechte Praxis?
- 24. async/erwarten schlechte Praxis unter Android?
- 25. Ist es eine schlechte Übung, in $ _POST zu schreiben?
- 26. Thread.Yield() als schädlich angesehen?
- 27. MySQL Store Image BLOB schlechte Praxis Leistung
- 28. Verwendet verschachtelte Initialisierer in Swift schlechte Praxis?
- 29. Importieren meiner Singleton-Klasse mit Project_Prefix.pch - Schlechte Praxis?
- 30. InvokeRequired blind verwendet nicht einfach schlechte Praxis?