Kakao oder Objective-C?

8

In Bezug auf iPhone-Entwicklung, wie geht es Ihnen jetzt, wenn Sie einen Kakao gegen reine Objective-C-Objekte verwenden. Zum Beispiel sind die folgenden Objective-C:

  • NSTimer
  • NSString
  • int, float
  • NSMutableArray

Aber das sind Kakao:

  • UILabel
  • UIColor (?)
  • UIView

Und um klar zu sein, tut

Kakao Touch == iPhone Entwicklung

Kakao == Mac OS X Entwicklung

    
4thSpace 15.03.2009, 05:46
quelle

4 Antworten

41

Sie haben es ein bisschen falsch.

NSTimer, NSString, NSMutableArray sind alle Cocoa. int und float sind eigentlich C, aber da Objective-C eine strenge Obermenge von C ist, können Sie sie in Ihrem Objective-C-Code verwenden.

Pure Objective-C erfordert nur die Verknüpfung mit der Objective-C-Laufzeitbibliothek und keine anderen Frameworks oder Bibliotheken. Cocoa ist ein Framework, das Dinge wie NSObject und NSString enthält. Andere Frameworks wie AppKit erweitern das Cocoa-Framework.

Kodierung in reinem Objective-C bedeutet in der Regel die Ableitung von dem Wurzelobjekt namens Object und nicht von NSObject. Dinge wie @implementation , @interface , @selector usw. sind die Objectiv-C-Erweiterungen von C und diese sind in allen Objective-C-Quellen üblich, rein oder nicht. Wenn Sie in reines Objective-C einprogrammieren wollen, können Sie nichts anderes als Ihre eigenen Objekte verwenden, die von Object abgeleitet sind.

%Vor%     
dreamlax 15.03.2009, 05:55
quelle
9

Wie bereits erwähnt, sind die NS * -Klassen eigentlich Cocoa, nicht Objective-C. Objective-C ist eine Sprache, während Cocoa ein Framework ist (eine Implementierung von OpenStep). Dieses Framework kann als "stdlib" -Äquivalent von C ++ betrachtet werden. Die UI * -Klassen sind Cocoa Touch, ein weiteres Framework, das für das iPhone entwickelt wurde.

Was die letzte Frage angeht, ja, Cocoa Touch ist nur für das iPhone. Cocoa ist für die Entwicklung von Mac OS X gedacht. Wie oben erwähnt, ist Cocoa jedoch eine OpenStep-Implementierung. Alternativen zu Kakao existieren, wie GNUstep und Cocotron. Diese alternativen Frameworks ermöglichen es, denselben Code auf mehreren Plattformen zu verwenden. Die OpenStep-Frameworks sind daher nicht nur für die Mac OS X-Entwicklung, sondern auch für Linux und Windows geeignet.

Eine weitere Sache ist, dass andere Objective-C-Laufzeiten unterschiedlich sind. Es gibt keine einzelne Objective-C-Spezifikation. Der Portable Object Compiler ist eine weitere Möglichkeit, dies zu tun. Da Apple der dominierende Benutzer von Objective-C ist und Cocoa kontrolliert, wird es als De-facto-Objective-C-Implementierung betrachtet.

    
sebnow 15.03.2009 06:12
quelle
2

Es stimmt, dass Cocoa Touch für iPhone-Entwicklung und "einfache" Cocoa für Mac OS X-Entwicklung ist, aber sie sind nicht sehr verschieden und teilen die meisten grundlegenden Klassen.

Bei der iPhone-Entwicklung müssen Sie sich nicht darum kümmern, ob Sie reines Objective-C oder Cocoa verwenden. Cocoa ist Bürger der 1. Klasse auf dem iPhone und du gewinnst nichts, indem du es vermeidest.

Es gibt einen kleinen Unterschied zwischen Objective-C und der einfachen alten C-Untermenge. Objektzuweisungen und Methodenaufrufe haben einen höheren Overhead als Stack-allokierte Strukturen und direkte Funktionsaufrufe, aber in 99% der Fälle müssen Sie sich auch nicht darum kümmern (versuchen Sie nicht, die Optimierung vorzeitig durchzuführen!).

    
Kornel 11.08.2009 12:31
quelle
1
  

In Bezug auf iPhone-Entwicklung, wie geht es Ihnen jetzt, wenn Sie einen Cocoa gegen reine Objective-C-Objekte verwenden.

Wenn Sie in Ihrer App nichts außer Objective-C verwenden, sind alle Cocoa-Objekte Objective-C-Objekte.

Wenn Sie Python oder Ruby verwenden, sind Ihre Objekte Python- oder Ruby-Objekte. Aber solange sie von Cocoa-Klassen erben, sind sie für andere Cocoa-Objekte zugänglich, unabhängig davon, ob sie in Objective-C geschrieben sind oder nicht.

(Es gibt Core Foundation, die Objekte bereitstellt, die in Cocoa gut funktionieren, aber nicht in Objective-C geschrieben sind. Dies ist ein Implementierungsdetail; mach dir keine Sorgen.)

  

Zum Beispiel sind Objective-C:

     
  • NSTimer
  •   
  • NSString
  •   
  • int, float
  •   
  • NSMutableArray
  •   

Nur NSTimer, NSString und NSMutableArray sind Objective-C-Klassen. int und float sind primitive Typen, keine Klassen. Und keiner von ihnen kommt aus Objective-C: int und float kommen von C, und die NS * -Klassen kommen alle aus Cocoa.

Wie sebnow schrieb, während ich dies schrieb, ist Cocoa ein Framework, während Objective-C eine Sprache ist. Die NS * -Klassen stammen alle aus dem Cocoa-Framework, nicht aus der Objective-C-Sprache.

  

Aber das sind Kakao:

     
  • UILabel
  •   
  • UIColor (?)
  •   
  • UIView
  •   

Nein, das sind Cocoa Touch. Sie sind in einer Cocoa-App nicht verfügbar. Ebenso sind Application Kit-Klassen in Cocoa Touch nicht verfügbar.

(Cocoa ist Foundation + AppKit; Cocoa Touch ist Foundation + UIKit.)

  

Und um klar zu sein, tut

     

Kakao Touch == iPhone Entwicklung

     

Kakao == Mac OS X Entwicklung

Ja. Cocoa Touch ist das iPhone-Framework; Cocoa ist das Mac-Framework.

    
Peter Hosey 15.03.2009 06:25
quelle