เป็นไปได้หรือไม่ที่จะตั้งโปรแกรม iPhone ใน C ++


124

ฉันทุกคนมีความหลากหลายทางภาษา แต่ Objective C นั้นบ้า ดังนั้นฉันจึงอยากรู้: เป็นไปได้ไหมที่จะเขียนโค้ดแอพ iPhone ด้วย C ++ ในขณะที่ใช้ Cocoa API ฯลฯ

คำตอบ:


57

คำตอบสั้น ๆ ใช่เรียงลำดับ คุณสามารถใช้ Objective-C ++ ซึ่งคุณสามารถอ่านได้ที่Apple Developer Connection

หากคุณรู้จัก C ++ แล้วการเรียนรู้ Objective-C นั้นค่อนข้างง่ายถ้าคุณตัดสินใจที่จะลองดู ข้อมูลเพิ่มเติมเกี่ยวกับหัวข้อนั้นอยู่ที่ ADC เช่นกัน


1
คุณสามารถแนะนำเว็บไซต์หรือหนังสือที่มุ่งเป้าไปที่โปรแกรมเมอร์ C ++ ที่มีประสบการณ์เพื่อเรียนรู้ Objective-C ได้หรือไม่? ฉันจัดการเพื่อผสมแอปทดสอบสองสามแอปเข้าด้วยกัน แต่ฉันพบว่าไวยากรณ์ถอยหลังเล็กน้อยและฉันแน่ใจว่าฉันกำลังทำสิ่งที่นำไปสู่การรั่วไหลของหน่วยความจำ ฯลฯ เพียงเพราะขาดความรู้เกี่ยวกับ Objective-C
Lea Hayes

3
@LeaHayes หนังสือฟรีชื่อ "From C ++ to Objective-C" สมมติว่าคุณรู้จัก C ++ จากนั้นจะบอกคุณว่าสิ่งต่างๆทำแตกต่างกันอย่างไรใน Objective-C pierre.chachatelier.fr/programmation/fichiers/cpp-objc-en.pdf (นี่คือคำแปลภาษาอังกฤษของต้นฉบับภาษาฝรั่งเศส)
olafure

61

แม้ว่า Objective-C จะดูเหมือน "บ้า" ในตอนแรก แต่ฉันขอแนะนำให้คุณยึดติดกับมัน เมื่อคุณมีช่วงเวลา "a-ha" ทันใดนั้นทุกอย่างก็เริ่มสมเหตุสมผล สำหรับฉันมันใช้เวลาประมาณ 2 สัปดาห์ในการจดจ่อกับ Objective-C ที่มุ่งเน้นในการทำความเข้าใจกรอบ Cocoa ภาษาและความลงตัวของมันทั้งหมด แต่เมื่อฉัน "ได้" จริงๆมันเป็นเรื่องที่น่าตื่นเต้นมาก

ฟังดูซ้ำซาก แต่มันเป็นเรื่องจริง ติดมันออก

แน่นอนว่าหากคุณนำไลบรารี C ++ หรือโค้ด C ++ ที่มีอยู่คุณสามารถใช้โมดูลเหล่านั้นกับ Objective-C / Objective-C ++


42

ฉันใช้ Objective-C เพื่อตบ UI ด้วยกัน
แต่ความกล้าหาญของโค้ดยังคงถูกเขียนด้วย C ++

นั่นคือวัตถุประสงค์หลักของ Objective-C อินเทอร์เฟซ UI และการจัดการเหตุการณ์
และใช้งานได้ดีสำหรับจุดประสงค์นั้น

ฉันยังคงชอบ C ++ เป็นแบ็กเอนด์สำหรับโค้ด (แต่ส่วนใหญ่เป็นเพราะฉันชอบ C ++) คุณสามารถใช้ Objective-C สำหรับแบ็กเอนด์ของแอปพลิเคชันได้อย่างง่ายดาย


9
@ Spanky: ฉันทำอะไรได้บ้าง คุณสามารถเขียน C ปกติในไฟล์ * .m คุณสามารถเขียน C ++ ปกติในไฟล์ * .mm (Objective-C ++) ภายในไฟล์ Objective-C (++) คุณสามารถใช้ได้ตามปกติ#include <XXX>เช่นเดียวกับไฟล์ C / C ++
Martin York

28

ก่อนอื่นการบอกว่า Objective-C นั้น "บ้า" เป็นเรื่องตลก - ฉันมีหนังสือ Bjarne Stroustrup C ++ นั่งอยู่ข้างๆซึ่งมีนาฬิกาอยู่ที่ 1,020 หน้า PDF ของ Apple ใน Objective-C คือ 141

ถ้าคุณต้องการใช้ UIKit มันจะยากมากสำหรับคุณที่จะทำอะไรใน C ++ แอพ iPhone ร้ายแรงใด ๆ ที่สอดคล้องกับ UI ของ Apple จะต้องใช้ส่วน UI เพื่อเขียนใน Objective-C เฉพาะในกรณีที่คุณกำลังเขียนเกม OpenGL คุณสามารถยึดติดกับ C / C ++ ได้เกือบทั้งหมด


30
ตั้งแต่เมื่อไหร่ที่เอกสารน้อยเป็นสิ่งที่ดี? "ภาษาการเขียนโปรแกรม C ++" อย่างละเอียดและยังจัดทำเอกสาร STL
Timmmm

2
@ Timmmm: นับตั้งแต่ K&R ทำประเด็นนั้นไว้ที่ด้านหน้าของหนังสือของพวกเขา Objective-C เป็นภาษาที่เล็กกว่าภาษา C ++ มากโดยมีประโยชน์หลายอย่างเหมือนกัน (และบางส่วนของตัวเอง) แน่นอนการแลกเปลี่ยนของทุกอย่าง แต่เอกสารที่น้อยที่สุดทำให้ Obj-C เป็นเรื่องง่ายสำหรับคน C (หรือ C ++) ที่มีประสบการณ์ในการเร่งความเร็ว
Ben Zotto

62
ขออภัย ObjC เสียสติ การยืนกรานเกี่ยวกับวิธีการประกาศฟังก์ชันที่แตกต่างไปจากเดิมอย่างสิ้นเชิงการใช้วงเล็บ มันแตกต่างกันโดยไม่มีประโยชน์ พวกเขาสามารถร่างภาษาที่มีประสิทธิภาพเดียวกันได้โดยไม่ต้องใช้ไวยากรณ์ที่ไร้สาระ พวกเขาเลือกที่จะไม่ทำ ดังนั้นมันจึงบ้า
Rhubarb

13
@Rhubarb - แม้ว่าฉันจะชอบ Objective-C ฉันต้องยอมรับว่าไวยากรณ์แปลก ๆ ไม่มีจุดประสงค์ใด ๆ
Raphael

1
Objective-C และ C ++ เกิดขึ้นในเวลาเดียวกันโดยมีเป้าหมายในการเพิ่มการเขียนโปรแกรมเชิงวัตถุให้กับ C Objective-C ตามแบบจำลองของ Smalltalk ของทุกสิ่งที่เป็นแบบไดนามิก C ++ เลือกที่จะใช้ตัวชี้ฟังก์ชัน (วิธีเสมือน) โดยพื้นฐาน ไวยากรณ์แปลก ๆ ทำหน้าที่แยกความแตกต่างของการส่งข้อความ ObjC จาก C ปกติการเรียกฟังก์ชันโดยตรง ไม่แน่ใจว่าจำเป็นอย่างยิ่งหรือไม่ แต่เป็นสิ่งหนึ่งที่ทำให้การผสมและจับคู่ ObjC และ C ++ ใน Objective-C ++ เป็นเรื่องง่ายมาก
Baxissimo

14

จากประสบการณ์นี้คุณสามารถใช้รหัส C ++ สำหรับรหัส "core" ของคุณได้ แต่คุณต้องใช้ objective-C สำหรับ iPhone รุ่นใดรุ่นหนึ่งโดยเฉพาะ

อย่าพยายามบังคับให้ Objective-C ทำหน้าที่เหมือน C ++ ในตอนแรกดูเหมือนว่าคุณจะเป็นไปได้ แต่โค้ดผลลัพธ์จะใช้ไม่ได้กับ Cocoa จริงๆและคุณจะสับสนมากว่าเกิดอะไรขึ้น ใช้เวลาในการเรียนรู้อย่างถูกต้องโดยไม่ต้องใช้ C ++ รอบ ๆ วิธีสร้าง GUI และแอปพลิเคชัน iPhone จากนั้นเชื่อมโยงในฐาน C ++ ของคุณ


3

คุณต้องใช้ Objective C เพื่อเชื่อมต่อกับ Cocoa API ดังนั้นจึงไม่มีทางเลือก แน่นอนว่าคุณสามารถใช้ C ++ ได้มากเท่าที่คุณต้องการเบื้องหลัง (Objective C ++ ทำให้เรื่องนี้ง่ายขึ้น)

มันเป็นภาษาที่บ้าจริง แต่ก็ ... สนุกดีที่จะใช้เมื่อคุณคุ้นเคยกับมันเล็กน้อย :-)


3

ผมไม่แน่ใจว่าเกี่ยวกับ C ++, แต่คุณสามารถรหัสแน่นอนการใช้งาน iPhone ใน C # โดยใช้ผลิตภัณฑ์ที่เรียกว่าMonoTouch

คุณสามารถดูโพสต์นี้สำหรับการอภิปรายโดยละเอียดเกี่ยวกับ MonoTouch Vs Obj-C: จะตัดสินใจอย่างไรระหว่าง MonoTouch และ Objective-C?


2

ฉันอยู่ระหว่างการย้ายแอพ Android ที่เน้นการคำนวณซึ่งเขียนด้วย Java ไปยัง iOS6 ฉันกำลังทำสิ่งนี้โดยการพอร์ตส่วนที่ไม่ใช่ UI จาก Java ไปยัง C ++ เขียนส่วน UI (น้อยที่สุด) ใน Obj-C และห่ออดีตไว้ในอินเทอร์เฟซ C (เล็ก) โดยใช้เทคนิค C / C ++ มาตรฐานเพื่อให้ สามารถเข้าถึงได้จาก Obj-C ซึ่งอยู่หลังชุดของ C.

ตอนนี้ได้ผลแล้วและยังไม่เจอ gotcha เลย ดูเหมือนว่าจะเป็นแนวทางที่ถูกต้องเนื่องจาก Xcode ช่วยให้คุณสามารถสร้างคลาส C ++ ได้เช่นเดียวกับคลาส Obj-C และโค้ดตัวอย่างอย่างเป็นทางการบางส่วนก็ทำในลักษณะนี้ ฉันไม่ต้องออกไปข้างนอกอินเทอร์เฟซที่รองรับอย่างเป็นทางการเพื่อทำสิ่งนี้

ดูเหมือนจะไม่มีประโยชน์อะไรมากจากการเขียนรหัส UI ที่เหลือของฉันใน C ++ แม้ว่าจะเป็นไปได้ก็ตามในมุมมองของความช่วยเหลือที่ผู้สร้างอินเทอร์เฟซใน Xcode มอบให้คุณดังนั้นคำตอบของฉันก็คือคุณสามารถใช้ C ++ สำหรับ เกือบทุกแอปของคุณหรือมากเท่าที่คุณคิดว่าเหมาะสม / สะดวก


2

ได้ แต่การคิดว่าคุณสามารถเขียนโปรแกรมได้ทุกประเภทในภาษาเดียวเป็นความคิดที่มีข้อบกพร่องเว้นแต่คุณจะเขียนโปรแกรมง่ายๆ Objective C ใช้สำหรับ Cocoa เนื่องจาก C # สำหรับ. NET ใช้เครื่องมือที่เหมาะสมสำหรับงานที่เหมาะสมพยายามทำให้ C ++ โต้ตอบกับ Cocoa ผ่านการเขียนโค้ดเชื่อมโยงและพยายามทำให้โค้ด C ++ ทำงานตามข้อกำหนดของ Cocoa ไม่ใช่ความคิดที่ดีและไม่คาดหวัง C ++ ประสิทธิภาพจาก Objective C คือ คุณควรพยายามออกแบบเค้าโครงและสถาปัตยกรรมของแอปโดยคำนึงถึงทักษะที่มีอยู่และพิจารณาว่าส่วนใดควรเขียนด้วยภาษาใดจึงจะสร้างตามนั้น


0

ฉันกำลังเขียน Objective-C ++ framework ที่เรียกว่า Objective-X ซึ่งทำให้ PURE C ++ iPHONE PROGRAMMING เป็นไปได้ คุณสามารถทำได้ดังนี้:

#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());    
}

และรวบรวมโดยใช้ตัวเลือกบรรทัดคำสั่งที่เหมาะสมของ GCC ฉันได้รวบรวมแอพ helloworld นี้ไว้แล้วและมัน w0rkX0rz เหมือนมีเสน่ห์ ;-) จะพร้อมใช้งานเร็ว ๆ นี้บน GoogleCode ค้นหา Objective-X หรือไปที่http://infotronix.orgfree.com/objectivexประมาณ หนึ่งสัปดาห์ต่อมา!

อัปเดต (แต่ดูเหมือนจะไม่ใช้งาน) URL: http://code.google.com/p/objectivex/


4
ทำไมไม่รอด้วยการโพสต์จนกว่าจะพร้อมใช้งานจริง?
Georg Fritzsche

8
ลิงก์ทั้งสองคือ 404 ตอนนี้
Zhao Xiang

1
อ้างอิงจาก SourceForge: "ณ วันที่ 2014-01-24 โครงการนี้ไม่ได้อยู่ระหว่างการพัฒนาอีกต่อไป" sourceforge.net/projects/objectivex
JAL

0

มันอาจจะดูผิดเพี้ยนไปบ้าง แต่อย่างไรก็ตาม คุณสามารถตั้งโปรแกรม c ++ ได้โดยตรงบนอุปกรณ์ iOS ตรวจสอบ app CppCode iOS - http://cppcode.info ฉันเชื่อว่ามันช่วยในการเรียนรู้ c และ c ++ และ objective-c ในภายหลัง

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.