2008-11-06 7 views
10

Ich habe mich sehr wohl in der Welt der Zeiger-freien, Müll-gesammelten Programmiersprachen. Jetzt muss ich eine kleine Mac-Komponente schreiben. Ich habe Objective-C gelernt, aber da ich die Möglichkeit habe, Zeiger zu hängen und die Notwendigkeit zu verwalten, zählt, bin ich entmutigt.Was sind Alternativen zu Objective-C für Mac-Programmierung?

Ich weiß, dass Objective-C jetzt Garbage Collection hat, aber das funktioniert nur mit Leopard. Meine Komponente muss auch mit Tiger arbeiten.

Ich muss auf einige Cocoa-Bibliotheken zugreifen, die für Java nicht verfügbar sind, sodass meine übliche Waffe der Wahl ausscheidet.

Was sind meine Alternativen? Vor allem ohne explizite Zeiger und automatische Speicherbereinigung.

+0

Objective-C 2.0 tut Speicherbereinigungs haben. –

+0

Er sagte, dass auch mit Tiger arbeiten muss. Dies schließt den Garbage Collector aus. – Hejazzman

+0

Es macht eigentlich nichts aus, dass Obj-C keine Garbage Collection hat (immer). Es verwendet ein Referenzzählsystem mit Pools mit automatischer Freigabe.Das Markieren von OBj-C-Klassenvariablen bedeutet, dass der erforderliche Code hinzugefügt wird, um die Refcounts zu verwalten. Sie müssen die ref-Zählung in Objective-C nicht explizit mit AppKit verwalten. –

Antwort

19

Was meinst du mit „Komponente?“ Meinst du ein Stück Code oder eine Bibliothek, die du anderen Leuten zur Verfügung stellen wirst, um sie mit ihren Apps zu verlinken? Wenn dies der Fall ist, ist es zu diesem Zeitpunkt nicht realistisch, eine der überbrückten Sprachen zu verwenden. Während viele der Bridges sehr nett sind, haben sie fast immer Komplikationen und Probleme, die die meisten App-Entwickler nicht bereit sind, mit einer einzigen Komponente umzugehen, besonders wenn es darum geht, eine beträchtliche Laufzeit zu erreichen.

Die Bridges sind am wertvollsten, um andere Sprachbibliotheken in Ihre Objective-C-App zu überbrücken. Sie können zwar ziemlich vollständige Apps mit ihnen schreiben, jedoch erfordert dies oft ein besseres Verständnis von Objective C als das Schreiben einer Objective-C-Anwendung, da Sie die Sprach-, Objektmodell-, Threading- und Speicherzuordnungs-Impedanzabweichungen verstehen müssen auftreten.

Dies ist auch, warum viele Menschen, dass auch argumentieren, wenn Sie sehr vertraut mit einer Sprache sind, versuchen, Kakao mit, dass die Sprache durch eine Brücke lernen im Allgemeinen schwieriger ist, dass es Objective C.

Schließlich mit vielen Lernen der jüngsten Unterstützung für überbrückte Sprachen war auf "BridgeSupport" zurückzuführen, eine Funktion wurde in Leopard hinzugefügt. Selbst Brücken, die älter sind, sind auf die Seite gewandert, manchmal so, dass die Verwendung der überbrückten Sprache bei Tiger und Leopard wesentliche Unterschiede haben kann.Außerdem gibt es derzeit keine Bridge-Unterstützung für das iPhone, und die meisten Bridged-Sprachen funktionieren nicht, wenn dies ein Problem ist.

Wenn Sie eine Bibliothek schreiben, die mit anderen Apps verknüpft werden soll, müssen Sie auf Tiger und Leopard laufen, und Sie müssen nur auf Cocoa-APIs zugreifen, die Sie mit keinem anderen Objective C finden Lösung ziemlich schwierig.

+0

Nicht was ich hören wollte, aber manchmal geht es so. Ich könnte jedoch Python anschauen und sehen, was ich tun kann. –

0

Betrachten Sie Python und wxPython (die WxWidgets in Python).

Die wxWidgets haben ein sehr elegantes App-Doc-View-Designmuster, das sehr, sehr schön ist. Es wird nicht genug benutzt, IMO. Ich habe keine wxPython-Beispiele für dieses App-Doc-View-Beispiel gefunden, daher müssen Sie anhand der C-Beispiele herausfinden, wie es in Python funktionieren würde.

Ich würde Beispiele veröffentlichen, aber ich habe auch noch nicht alles funktioniert.

+0

Nichts ist besser, als mit Interface Builder die Benutzeroberfläche zu entwickeln. Sie müssen haufenweise arbeiten, um eine "Mac-Like" UI mit einer anderen API zu erhalten. –

+0

Arbeite härter - ja. Nicht "humps", aber auf jeden Fall ziemlich viel Arbeit. –

+0

Ich würde gerne ein gutes Beispiel für eine wxWidgets-Anwendung auf OSX sehen ... Sie sehen alle wie Mist aus. – schwa

11

Sie können PyObjC versuchen, Cocoa-Apps in Python zu schreiben, oder MacRuby, wenn Sie an Ruby interessiert sind.

+0

Aber Sie werden mit Sicherheit Leo/Xcode 3+ für PyObjC verwenden, und ich möchte überprüfen, ob der von Ihnen erstellte Code vor Leopard funktioniert. –

2

RubyCocoa wird immer beeindruckender, und ich habe viele erfolgreiche Implementierungen gesehen, die es verwenden. Das heißt, natürlich, wenn Rubys Ihre Tasse Tee ...

+0

Überprüfen Sie auch MacRuby. http://macruby.org – mk12

0

.NET über Mono mono-project.com

9

Sie sollten sich nicht durch Cocoas Retain/Release-Referenzzählung einschüchtern lassen. Es ist viel, viel einfacher in der Praxis als GC-Fans glauben machen möchten. Die Cocoa memory management rules sind tot einfach, sie betreffen nur eine kleine Menge Ihres Codes, und sogar , dass Code automatisch generiert werden kann.

Hier ist der Trick. Sie kapseln Ihren MM-Code in Accessormethoden ein und verwenden immer Accessoren. Xcode hat eingebaute Skripte, um die passenden Accessoren zu generieren, oder wenn Sie mehr Flexibilität benötigen, gibt es 3rd-part Apps wie Accessorizer.

Dies ist kein aufdringlicher Ansatz - Sie müssen sich nur darum kümmern, ein Objekt zu behalten, wenn Sie es für die spätere Verwendung aufbewahren müssen, und wenn Sie das tun, benötigen Sie eine Instanz Variable, um es trotzdem zu behalten. Und wenn Sie KVO und Bindungen verwenden, müssen Sie Zugriffsmethoden verwenden, um sicherzustellen, dass die entsprechenden Beobachterbenachrichtigungen ausgelöst werden. Wenn Sie gute OOP- und Cocoa-Praktiken verwenden, gibt es praktisch keine zusätzlichen Überlegungen und keinen Aufwand für die Speicherverwaltung.

Die meisten Leute, die Schwierigkeiten mit der "manuellen" Speicherverwaltung von Cocoa haben, tun dies als Folge des Missbrauchs. Der häufigste Fehler ist, den entsprechenden Code überall zu verteilen. Das bedeutet, dass eine fehlende Retain, Extra Release, etc. schwer zu finden sein wird.

1

Sie können REALbasic immer verwenden (www.realsoftware.com). Wirklich einfach und Spaß zu benutzen, aber nicht frei. Sie können keine Dylibs (oder DLLs) verwenden, aber Sie können Dylibs und DLLs in Ihrem Code verwenden. Und Sie können auch Kakaobibliotheken verwenden

1

Vergessen Sie nicht, dass Sie auch Java verwenden können, und ich meine nicht Java-Kakaobrücke, ich meine eigentlich Java.

Es gibt auch ein Paket von Apple, das Ihnen Zugriff auf ein paar Osx-Funktionen bietet.

Auch um Shems Punkt zu kommentieren, wenn Sie auf osx 10.5 und höher abzielen, können Sie die Garbage Collection nutzen.

1

Wenn Sie Lisp-Syntax wollen, dann ist Nu ein Lisp oben auf Objective-C implementiert http://www.programming.nu/

+0

Es scheint keine Umleitung von www zu geben, der Link ist http://programming.nu/ – tvon

0

ich in Mono zu suchen bin. Objective-C ist an dieser Stelle für mich etwas zu bizarr. Zu viele Jahre C/C++, Java, C#, Perl usw., nehme ich an. All dies scheint ziemlich einfach zwischen ihnen zu schweben. Nicht so für Objective-C. Liebe meinen Mac, aber ich fürchte, es wird zu viel kostbare Zeit brauchen, um die Sprache zu beherrschen.

1

Auch kann Freepascal nativen Kohlenstoff Anwendungen erzeugen (in Bearbeitung für Coccoa Arbeits)