Objective-C หรือ C ++ สำหรับเกม iOS?


18

ฉันค่อนข้างมั่นใจในการเขียนโปรแกรมใน Objective-C และ C ++ แต่ฉันคิดว่า Objective-C นั้นใช้งานได้ง่ายกว่าและมีความยืดหยุ่นและไดนามิกมากกว่าในธรรมชาติ

ข้อดีและข้อเสียเมื่อใช้ C ++ แทน Obj-C สำหรับการเขียนเกมใน iOS จะเป็นอย่างไร หรือค่อนข้างมีปัญหาใด ๆ ที่ทราบเกี่ยวกับการใช้ Obj-C เมื่อเทียบกับ C ++?

ตัวอย่างเช่นฉันสงสัยว่าอาจมีปัญหาด้านประสิทธิภาพการทำงานกับ Obj-C เทียบกับรหัสที่เขียนใน C / C ++


คำตอบ:


21

ข้อดีอย่างหนึ่งของ C ++: ถ้าคุณตัดสินใจที่จะทำเช่นนั้นมันจะค่อนข้างง่ายในการย้ายไปยัง Android / PC / DS / PSP / (ใส่แพลตฟอร์มของตัวเลือกที่นี่) Objective-C จะล็อคคุณเข้าสู่ iOS จนกว่าคุณจะตัดสินใจเขียนเกมใหม่ทั้งหมด


10
ฉันไม่เห็นด้วยกับคำว่า "ง่าย" "เป็นไปได้" อาจเป็นทางเลือกที่ดีกว่า
3

1
ใช่สำหรับเกมเล็ก ๆ (เช่นเกมส่วนใหญ่ของ iPhone) จะเป็นการดีกว่าที่จะเขียนทุกอย่างใหม่ตั้งแต่เริ่มต้นสำหรับแพลตฟอร์มใหม่แทนที่จะพยายามปรับเปลี่ยนรหัสจากแพลตฟอร์มหนึ่งไปยังอีกแพลตฟอร์มหนึ่ง สถาปัตยกรรม MVC ที่เป็นของแข็งจะช่วยลดความเจ็บปวดนี้ แต่ใครจะไปสนใจกับสิ่งนั้นสำหรับเกมจับคู่ 3?
jhocking

3
ค่อนข้างง่าย! หากทางเลือกที่เป็นไปไม่ได้แล้ว "ยากมาก" ค่อนข้างง่าย;)
ZorbaTHut

blog.vucica.net/2011/06/…เขาพูดถึงการสร้างแอพ Objective C สำหรับ Android เป็นเพียง Linux และ Linux เท่านั้นที่สามารถเรียกใช้ Objc ได้อย่างง่ายดายเหมือนกับ iPhone
แมวผิดพลาด

การใช้วัตถุประสงค์ c จะไม่ล็อคคุณการใช้ฟังก์ชันเฉพาะสำหรับเคอร์เนล XNU จะ Gclang อยู่ที่นั่นด้วยเหตุผล

16

ไม่มีข้อดีหรือข้อเสียที่แท้จริงอย่างน้อยที่สุดก็ไม่มีใครที่จะบังคับให้โปรแกรมเมอร์สะดวกสบายในภาษาหนึ่งที่ต้องใช้อีกภาษาหนึ่ง

ประสิทธิภาพไม่ควรเป็นปัญหา มันไม่น่าเป็นไปได้ที่คุณจะเขียนการยกของหนักด้วยการส่งข้อความจำนวนมากในลูปด้านในถ้าคุณเป็นโปรแกรมเมอร์ Obj-C ที่ดีซึ่งหมายความว่าคุณจะเขียนลูปภายในเหล่านั้นเป็น C จริงๆถ้าคุณไม่ต่ำ โปรแกรมเมอร์ระดับโอกาสที่จะมีการยกของหนักขึ้นโดยห้องสมุดใด ๆ ที่คุณเลือกที่จะเลื่อนไปด้วยและคุณก็จะอยู่ในความเมตตาของสิ่งที่พวกเขาเลือกที่จะทำ

การพกพาเป็นปัญหาที่แท้จริงหากคุณใส่ใจ ถ้าไม่เช่นนั้นฉัน การเป็นแพลตฟอร์มไขว้นั้นไม่ใช่จุดจบทั้งหมด การประสบความสำเร็จในครั้งแรกจะดี :) คุณสามารถพอร์ตในภายหลัง หากคุณไม่ได้วางแผนที่จะข้ามแพลตฟอร์มอย่างรอบคอบตั้งแต่วันที่ 1 อย่างไรก็ตามการอยู่ในภาษาเดียวกันจะไม่ทำให้คุณไปไกลขนาดนี้: มีความแตกต่างที่แท้จริงระหว่างแพลตฟอร์มที่ต้องใช้ที่อยู่

การทำโครงงานให้เสร็จนั้นสำคัญกว่าที่จะทำให้หงุดหงิดเกี่ยวกับเทคโนโลยีและถ้าคุณมีประสิทธิภาพมากขึ้นใน Obj-C ให้อยู่ใน Obj-C

ความชอบของฉัน? ฉันเป็นผู้ชาย C ++ ฉันชอบ Obj-C เพียงแค่ปรับ แต่ฉันมีความสุขใน C ++ และฉันทำเขียนรหัสข้ามแพลตฟอร์ม


5
ฉันเห็นด้วยอย่างมากกับคำแนะนำที่ให้ความสำคัญกับการทำโครงงานเสร็จด้วยเครื่องมืออะไรก็ตามที่คุณมีประสิทธิผลมากที่สุด การหลีกเลี่ยงการปรับให้เหมาะสมก่อนวัยอันควรไม่เพียง แต่ใช้กับการเขียนโค้ด แต่เป็นวิธีที่ดีในการเข้าถึงชีวิต
jhocking

4

ไม่มีปัญหาประสิทธิภาพการทำงานกับ Obj-C ผ่าน C ++ ทั้งสองเป็นรหัสที่รวบรวมและจำได้ว่า Obj-C เป็นชุดของ C และ Obj-C ++ เป็นชุดของ C ++ ซึ่งยอดเยี่ยมเมื่อคุณต้องการผสม Obj-C และ C ++ ในโปรแกรมเดียวกัน (ง่ายต่อการทำและ XCode มีการสนับสนุนที่ดีสำหรับด้าน C ++) การรวมภาษาทั้งหมดรองรับ OpenGL ดังนั้นการทำงานด้านกราฟิกที่รุนแรงก็ใช้ได้ดีและการสนับสนุนไลบรารีก็โอเคกับ Apple ไม่ว่าจะใช้ภาษาใดก็ตาม

ที่กล่าวว่าวัตถุประสงค์ของเกมของคุณคืออะไร?

  • หากคุณเป็นคนเขียน IOS เท่านั้นไม่ต้องกังวลและเขียนในภาษาใด ๆ หรือชุดค่าผสมที่คุณรู้สึกสบายใจขึ้นสำหรับฉันสิ่งนี้เกิดขึ้นเป็น Obj-C ++ กับ STL เนื่องจากเป็นส่วนที่ฉันโปรดปรานของ C ++ เนื่องจากฉันชอบ Obj-C มากกว่า C ++ เล็กน้อยฉันจึงมักจะใช้ตัวเลือกนี้

  • หากคุณกำลังเขียนโดยมีเป้าหมายในการย้ายไปยังอุปกรณ์อื่นให้เขียนใน C ++ พร้อมเลเยอร์การแปลไปยัง Obj-C เพื่อจัดการกับอุปกรณ์เฉพาะใด ๆ (กราฟิกอินพุตกล้องถ่ายรูป ... ) ที่มีการโทร จุดเริ่มต้นในใบสมัครของคุณ

  • หากคุณเป็นผู้บริสุทธิ์และต้องการเพียงหนึ่งภาษาเขียนใน Obj-C

คนอื่นพูดถึงห้องสมุดอื่น (ฟิสิกส์และเช่นนั้น) ไม่มีปัญหาในการเข้าถึงสิ่งเหล่านี้จากตัวเลือกภาษาที่คุณกำลังพูดถึง (Obj-C, C ++ หรือ Obj-C ++) คุณจะไม่มีปัญหาด้านประสิทธิภาพใด ๆ กับไลบรารีเหล่านั้นในภาษาใด ๆ

ข้อแม้: มีการเรียกการชี้ทางอ้อมพร้อมการส่งผ่านข้อความ ฉันไม่แน่ใจว่าคุณสามารถตีความว่าเป็นค่าใช้จ่ายได้มากแค่ไหนเพราะฉันค่อนข้างแน่ใจว่ามันเหมือนกับการเรียกใช้เมธอด C ++ ที่สืบทอดมา ทุกคนสามารถอธิบายได้หรือไม่

หวังว่าจะช่วย

ที่กำบัง


1
คะแนนที่ดี แต่คุณต้องการที่จะเขียนVector3Dชั้นเรียนของคุณใน Obj-C หรือไม่? ความรู้สึกของฉันบอกว่าสามารถนำไปสู่ประสิทธิภาพที่ไม่ดี
Martin Wickman

1
แค่นั้นแหละ Obj-C คือ C ไม่ใช่ปัญหาด้านประสิทธิภาพ หากคุณไปที่ไฟล์ส่วนหัวมาตรฐานด้วย XCode คุณจะพบว่าประเภทพื้นฐานเป็นเพียงโครงสร้าง C
ลี

2
ข้อความโอเวอร์เฮดที่มี Obj-C นั้นค่อนข้างสูงกว่า C ++ ค่อนข้างมากเพราะมันเป็นแบบไดนามิกมากขึ้น มันไม่แน่นอน "เหมือนเดิม" เช่น: ดูdeveloper.apple.com/library/mac/#documentation/Cocoa/Conceptual/…
Andy Dent

1

มันขึ้นอยู่กับสิ่งที่คุณกำลังเขียนโปรแกรม ถ้าส่วนใหญ่เป็นตรรกะของเกมโดยใช้เครื่องมือฟิสิกส์และกราฟิกที่มีอยู่ฉันสามารถพูดได้อย่างปลอดภัยว่าฉันไม่เห็นเหตุผลใด ๆ ที่จะใช้ c หรือ c ++ ถ้าคุณสบายใจกว่าด้วย obj-c หากคุณกำลังจะเปิดตัวการเรนเดอร์หรือคลาสฟิสิกส์ฉันอาจจะเขียนมันโดยใช้ c หรือ c ++ Cocos2d - ซึ่งเป็นเกมที่ยอดเยี่ยมและหนึ่งในห้องสมุดเกม iOS ที่ได้รับความนิยมมากที่สุดถูกเขียนใน obj-c

ลองอ่านอ่าน - ส่วนที่เกี่ยวข้องคือ "การแบ่งงาน" อาจช่วยให้คุณตัดสินใจได้ว่าเมื่อใดที่ต้องใช้รหัสในภาษาระดับสูงกว่าและเมื่อใช้ระดับที่ต่ำกว่า: รหัสที่ได้รับการจัดการในเกม

ในขณะที่ค่าใช้จ่ายตามวัตถุประสงค์ไม่ควรอยู่ใกล้กับ C # และไม่มีการจัดการ (บน iOS) ฉันเชื่อว่าตรรกะยังคงมีผลบังคับใช้และอุปกรณ์ที่ใช้ iOS ยังไม่มีตำแหน่งที่แข็งแกร่งเท่ากับพีซีที่ตีความ MSIL :)


2
Obj-C ไม่ใช่รหัสที่จัดการบน iOS ตัวอย่างเช่น (และโดยเฉพาะอย่างยิ่ง) Obj-C มีตัวรวบรวมขยะเมื่อตั้งโปรแกรมสำหรับ OSX แต่ไม่มีตัวรวบรวมขยะบน iOS
jhocking

@ การกระแทกฉันไม่เคยพูดว่ามันจัดการแล้วยังไม่มีค่าใช้จ่ายเมื่อใช้ obj-c ซึ่งต่างจาก c ++ ใช่ไหม ฉันพูดถึง c # vs c ++ มันไม่ใกล้ obj-c vs ​​c ++
Zaky German

เมื่อคุณโพสต์ลิงก์ที่ชื่อว่า "Managed Code ในเกม" ในขณะที่พูดถึง Obj-C ดังนั้นฉันคิดว่าคุณคิดว่า Obj-C เป็นโค้ดที่จัดการแล้ว สิ่งที่มันอยู่บน OSX ไม่ใช่บน iOS ชนิดที่โง่ราวกับว่า Java รวบรวมรหัสเครื่องในบางแพลตฟอร์ม แต่วิ่งใน JVM กับคนอื่น ๆ
jhocking

โอ้และฉันไม่รู้ว่า Obj-C มีค่าใช้จ่ายใด ๆ เมื่อเทียบกับ C ++ นั่นเป็นเหตุผลที่ฉันไม่ได้โพสต์คำตอบด้วยตนเอง
jhocking

1
@ jhocking no sir :) "สิ่งที่เกิดขึ้นคือรุ่นเก็บ / วางจำหน่ายใน Objective-C นั้นเป็นพื้นกลางจากการไม่จัดการหน่วยความจำไปจนถึง GC พื้นฐานดังนั้นคุณจึงก้าวไปข้างหน้าโค้ง" interfacelab.com/objective-c-memory-management-for-lazy-people
Zaky German

1

การศึกษานี้กล่าวว่าเพื่อให้ได้ประสิทธิภาพในเกมที่ใช้ซีพียูอย่างจริงจังคุณต้องใช้ C บทความที่เชื่อมโยงนั้นเสร็จสมบูรณ์ด้วยโครงการ XCode ที่คุณสามารถรันได้

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

position = [[Vector3 alloc] init] ;ฉันหมายความว่ามันจะเป็นอย่างสิ้นเชิงโง่ที่จะเห็น คุณแค่ถามถึงผลการปฏิบัติงานหากคุณใช้การอ้างอิงในวัตถุพื้นฐานเช่นเวกเตอร์ตำแหน่ง

ดูการเปรียบเทียบเหล่านี้ด้วย

เปรียบเทียบ


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