İPhone'u C ++ ile programlamak mümkün mü


124

Ben dil çeşitliliğinden yanayım ama Objective C delilik. Bu yüzden merak ediyorum: Cocoa API vb. Kullanırken iPhone uygulamalarını C ++ ile kodlamak mümkün mü?

Yanıtlar:


57

Kısa cevap, evet, biraz. Apple Developer Connection'da hakkında okuyabileceğiniz Objective-C ++ 'ı kullanabilirsiniz .

C ++ 'ı zaten biliyorsanız, bunu denemeye karar verdiyseniz, Objective-C öğrenmek oldukça basit olacaktır. Bu konu hakkında daha fazla bilgi ADC'de de mevcuttur.


1
Objective-C'yi öğrenmek için deneyimli C ++ programcılarını hedefleyen bir web sitesi veya kitap tavsiye edebilir misiniz? Birkaç deneme araya uygulamaları püre başardı ama sözdizimini biraz geriye doğru bulup ben sadece Objective-C bilgi eksikliği yüzünden hafıza sızıntıları vb yol şeyleri yapıyorum eminim
Lea Hayes

3
@LeaHayes "C ++ 'dan Objective-C'ye" adlı ücretsiz bir kitap. C ++ 'ı bildiğinizi varsayar ve sonra size Objective-C'de işlerin nasıl farklı şekilde yapıldığını söyler. pierre.chachatelier.fr/programmation/fichiers/cpp-objc-en.pdf (bu, orijinal Fransızcanın İngilizce çevirisidir)
olafure

61

Objective-C başlangıçta gerçekten "deli" gibi görünse de, buna bağlı kalmanızı tavsiye ederim. Bir "a-ha" anı yaşadığınızda, aniden her şey anlam kazanmaya başlar. Benim için Cocoa çerçevelerini, dili ve hepsinin nasıl birbirine uyduğunu gerçekten anlamak için yaklaşık 2 hafta odaklı Objective-C konsantrasyonu gerekti. Ama gerçekten "anladığımda" çok çok heyecan vericiydi.

Klişe geliyor ama doğru. Çıkarın.

Elbette, C ++ kitaplıklarını veya mevcut C ++ kodunu getiriyorsanız, bu modülleri Objective-C / Objective-C ++ ile kullanabilirsiniz.


42

UI'yi bir araya getirmek için Objective-C kullanıyorum.
Ancak kodun zor kısmı hala C ++ ile yazılmıştır.

Bu, Objective-C'nin UI arayüzünün ve olayların işlenmesinin temel amacıdır.
Ve bu amaç için harika çalışıyor.

Yine de kod için arka uç olarak C ++ 'ı seviyorum (ancak bu esas olarak C ++' yı sevdiğim için), uygulamanın arka ucu için de Objective-C'yi oldukça kolay bir şekilde kullanabilirsiniz.


9
@Spanky: Tam olarak ne yapıyorum. * .M dosyasında normal C yazabilirsiniz. * .Mm dosyalarında (Objective-C ++) normal C ++ yazabilirsiniz. Objective-C (++) dosyalarının içinde, #include <XXX>C / C ++ dosyaları gibi normal kullanabilirsiniz .
Martin York

28

Öncelikle, Objective-C'nin "çılgın" olduğunu söylemek komiktir - 1020 sayfada saatlerini gösteren Bjarne Stroustrup C ++ kitabı yanımda duruyor. Apple'ın Objective-C hakkındaki PDF dosyası 141'dir.

UIKit'i kullanmak istiyorsanız, C ++ ile herhangi bir şey yapmanız çok ama çok zor olacaktır. Apple'ın kullanıcı arayüzüne uyan herhangi bir ciddi iPhone uygulaması, UI bölümlerinin Objective-C'de yazılmasına ihtiyaç duyacaktır. Sadece bir OpenGL oyunu yazıyorsanız, neredeyse tamamen C / C ++ 'ya bağlı kalabilirsiniz.


30
Ne zamandan beri daha az dokümantasyon iyi bir şeydi? "C ++ Programlama Dili" çok kapsamlı ve aynı zamanda STL'yi belgeliyor.
Timmmm

2
@Timmmm: K&R kitabının ön meselelerinde bu noktayı belirttiğinden beri. Objective-C, C ++ 'dan çok daha küçük bir dildir ve aynı faydaların birçoğuna (ve biraz daha fazlasına) sahiptir. Elbette her şey değiş tokuş. Ancak minimum dokümantasyon, Obj-C'yi deneyimli C (veya C ++) insanların hızlanmasını oldukça kolaylaştırır.
Ben Zotto

62
Üzgünüm ama ObjC delilik. Fonksiyonları tanımlamanın tamamen farklı bir yolu, parantez kullanımı ısrarı. Fayda olmaksızın farklı olmak. Gülünç sözdizimi olmadan aynı etkili dili tasarlayabilirlerdi. Yapmamayı seçtiler. Bu yüzden delilik.
Rhubarb

13
@Rhubarb - Objective-C'yi sevmeme rağmen, garip sözdiziminin hiçbir amaca hizmet etmediğini kabul etmeliyim.
Raphael

1
Objective-C ve C ++, her ikisi de C'ye nesne yönelimli programlama eklemek amacıyla hemen hemen aynı anda ortaya çıktı. Objective-C, Smalltalk'ın her şeyin dinamik gönderme modelini takip etti, C ++ temelde işlev işaretçileri (sanal yöntemler) kullanmayı seçti. Garip sözdizimi, ObjC mesaj gönderimini normal C, doğrudan işlev çağrılarından ayırmaya yarar. Kesinlikle gerekli olup olmadığından emin değilim, ancak ObjC ve C ++ 'ı Objective-C ++' da karıştırmayı ve eşleştirmeyi çok kolaylaştıran bir şey.
Baxissimo

14

Bu konuda biraz deneyime sahip olarak, "çekirdek" kodunuz için gerçekten C ++ kodunu kullanabilirsiniz, ancak iPhone'a özgü herhangi bir şey için amaç-C'yi kullanmanız gerekir.

Objective-C'yi C ++ gibi davranmaya zorlamayın. İlk başta size bu mümkün gibi görünecek, ancak ortaya çıkan kod Cocoa ile gerçekten iyi çalışmayacak ve neler olduğu konusunda kafanız çok karışacak. Herhangi bir C ++ olmadan düzgün bir şekilde öğrenmek için zaman ayırın, GUI'leri ve iPhone uygulamalarını nasıl oluşturacağınızı ve ardından C ++ tabanınıza bağlanın.


3

Cocoa API ile arayüz oluşturmak için Objective C kullanmanız gerekir, bu nedenle başka seçenek yoktur. Elbette perde arkasında istediğiniz kadar C ++ kullanabilirsiniz (Objective C ++ bunu kolaylaştırır).

Gerçekten çılgınca bir dil, ama aynı zamanda ... biraz alıştıktan sonra kullanmak da eğlenceli. :-)



2

Java ile yazılmış yoğun hesaplama gerektiren bir Android uygulamasını iOS6'ya taşıma sürecindeyim. Bunu, UI olmayan parçaları Java'dan C ++ 'ya taşıyarak, (minimal) UI parçalarını Obj-C'ye yazarak ve birincisini standart C / C ++ tekniğini kullanarak bir (küçük) C arayüzüne sararak yapıyorum, böylece C'nin bir üst kümesi olan Obj-C'den erişilebilir.

Bu şimdiye kadar etkili oldu ve herhangi bir sorunla karşılaşmadım. Meşru bir yaklaşım gibi görünüyor, çünkü Xcode, C ++ sınıflarının yanı sıra Obj-C sınıfları oluşturmanıza izin veriyor ve resmi örnek kodlardan bazıları işleri bu şekilde yapıyor. Bunu yapmak için resmi olarak desteklenen arayüzlerin dışına çıkmam gerekmedi.

Xcode'daki arayüz oluşturucu tarafından size verilen yardım göz önüne alındığında, mümkün olsa bile, kalan UI kodumu C ++ 'da yazmanın pek bir faydası olmayacak gibi görünüyor, bu yüzden cevabım, C ++' ı kullanabileceğiniz şeklinde olacaktır. neredeyse tüm uygulamanız veya sizin uygun / uygun bulduğunuz kadarıyla.


2

Evet ama her tür programı tek bir dilde programlayabileceğinizi düşünmek, çok basit programlar yazmıyorsanız kusurlu bir fikirdir. C # .NET için olduğundan Objective C Cocoa içindir, Doğru iş için doğru aracı kullanın, Köprüleme kodu yazarak C ++ ile Cocoa etkileşimini sağlamaya çalışmak ve C ++ kodunun Cocoa gereksinimlerine göre davranmasını sağlamaya çalışmak iyi bir fikir değildir ne de C ++ beklemek Amaç C'nin performansı. Mevcut becerileri göz önünde bulundurarak uygulamanın tasarımını ve mimarisini düzenlemeye çalışmalı ve hangi bölümün hangi dilde yazılacağını belirlemeli ve buna göre inşa etmelisiniz.


0

Şu anda Objective-X adlı bir Objective-C ++ çerçevesi yazıyorum, bu da PURE C ++ iPHONE PROGRAMMING'i mümkün kılıyor. Bunu beğenebilirsin:

#import "ObjectiveX.h"

void GUIApplicationMain() {    
    GUIAlert Alert;
    GUILabel Label;
    GUIScreen MainScreen;

    Alert.set_text(@"Just a lovely alert box!");
    Alert.set_title(@"Hello!");
    Alert.set_button(@"Okay");
    Alert.show();

    Label.set_text(@"Ciao!");
    Label.set_position(100, 200, 120, 40);

    MainScreen.init();
    MainScreen.addGUIControl(Label.init());    
}

ve GCC'nin uygun komut satırı seçeneklerini kullanarak derleyin. Bu helloworld uygulamasını zaten derledim ve bir cazibe gibi w0rkX0rz. ;-) Yakında GoogleCode'da satışa sunulacak. Objective-X'i arayın veya yaklaşık olarak http://infotronix.orgfree.com/objectivex adresini ziyaret edin . bir hafta sonra!

Güncellenen (ancak görünüşe göre etkin olmayan) URL: http://code.google.com/p/objectivex/


4
Gerçekten mevcut olana kadar göndermeyi neden beklemiyorsunuz?
Georg Fritzsche

8
Her iki bağlantı da şimdi 404
Zhao Xiang

1
SourceForge'ye göre: "2014-01-24 itibariyle, bu proje artık aktif geliştirme aşamasında değil." sourceforge.net/projects/objectivex
JAL

0

Biraz konu dışı olabilir ama neyse. C ++ 'ı doğrudan iOS cihazlarda programlayabilirsiniz. CppCode ios uygulamasına bakın - http://cppcode.info . Daha sonra c ve c ++ ve amaç-c'yi öğrenmenin yardımcı olduğuna inanıyorum.

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.