Saya pemrograman cukup percaya diri dalam Objective-C dan C ++, tapi saya menemukan Objective-C agak lebih mudah digunakan dan lebih fleksibel dan dinamis.
Apa yang akan menjadi pro dan kontra ketika menggunakan C ++ bukannya Obj-C untuk menulis game di iOS? Atau lebih tepatnya, apakah ada masalah yang diketahui dengan menggunakan Obj-C dibandingkan dengan C ++?
Sebagai contoh, saya menduga mungkin ada masalah kinerja dengan Obj-C dibandingkan dengan kode yang ditulis dalam C / C ++.
c++
ios
performance
objective-c
Martin Wickman
sumber
sumber
Jawaban:
Satu keuntungan besar untuk C ++: Jika Anda memutuskan untuk melakukannya, itu akan relatif mudah untuk port ke Android / PC / DS / PSP / (masukkan platform pilihan di sini). Objective-C akan mengunci Anda ke iOS hingga Anda memutuskan untuk menulis ulang seluruh permainan.
sumber
Tidak ada pro atau kontra nyata di sini, setidaknya tidak ada yang harus memaksa seorang programmer merasa nyaman dalam satu bahasa harus menggunakan yang lain.
Kinerja seharusnya tidak menjadi masalah. Tidak mungkin Anda akan menulis angkat berat dengan banyak pesan di loop batin jika Anda seorang programmer Obj-C yang baik, yang berarti Anda benar-benar akan menulis loop batin dalam C. Jika Anda tidak rendah programmer tingkat, kemungkinan besar adalah pengangkatan berat akan dilakukan oleh perpustakaan apa pun yang Anda pilih untuk menunda itu juga, dan Anda akan berada di bawah kekuasaan apa pun yang telah mereka pilih untuk dilakukan.
Portabilitas adalah masalah nyata, jika Anda peduli. Jika tidak, maka meh. Menjadi lintas platform bukanlah akhir dari semuanya. Menjadi sukses pada satu pertama akan menyenangkan :) Anda selalu dapat port nanti. Jika Anda tidak berencana untuk menjadi lintas platform dengan hati-hati mulai hari pertama, hanya dengan bahasa yang sama tidak akan membuat Anda jauh: ada banyak perbedaan nyata lebih lanjut antara platform yang perlu ditangani.
Menyelesaikan proyek lebih penting daripada mengkhawatirkan teknologi, dan jika Anda lebih produktif di Obj-C maka tetaplah di Obj-C.
Preferensi saya? Saya seorang pria C ++. Aku seperti obj-C baik-baik saja, tapi aku senang di C ++, dan saya melakukan write lintas platform kode.
sumber
Tidak ada masalah kinerja dengan Obj-C lebih dari C ++. Keduanya adalah kode yang dikompilasi, dan ingat bahwa Obj-C adalah superset dari C, dan Obj-C ++ adalah superset dari C ++, yang sangat bagus ketika Anda ingin mencampur Obj-C dan C ++ dalam program yang sama (mudah dilakukan dan XCode memiliki dukungan yang bagus untuk sisi C ++). Semua kombinasi bahasa mendukung OpenGL, sehingga setiap pekerjaan grafik yang serius baik-baik saja dan dukungan pustaka baik-baik saja dengan Apple terlepas dari bahasa.
Yang mengatakan, apa tujuan permainan Anda?
Jika Anda hanya menulis untuk iOS, maka jangan khawatir dan menulis dalam bahasa apa pun atau kombinasi yang Anda rasa lebih nyaman. Bagi saya, ini adalah Obj-C ++ dengan STL karena itu adalah bagian favorit saya dari C ++. Karena saya lebih suka Obj-C sedikit daripada C ++, saya cenderung menggunakan opsi ini.
Jika Anda menulis dengan tujuan porting ke perangkat lain, tulis dalam C ++ dengan layer terjemahan ke Obj-C untuk menangani hal-hal spesifik perangkat (grafik, input, kamera, ...), di mana panggilan dibuat untuk titik masuk dalam aplikasi Anda.
Jika Anda paling murni dan hanya ingin satu bahasa, tulis dalam Obj-C.
Yang lain berbicara tentang perpustakaan lain (fisika dan semacamnya). Sama sekali tidak ada masalah dengan mengakses semua itu dari salah satu pilihan bahasa yang Anda bicarakan (Obj-C, C ++, atau Obj-C ++). Anda juga tidak akan memiliki masalah kinerja dengan pustaka tersebut dalam bahasa apa pun.
Peringatan: Ada panggilan tipuan pointer dengan passing pesan. Saya tidak yakin seberapa banyak Anda dapat menafsirkannya sebagai overhead, karena saya cukup yakin itu persis sama dengan panggilan metode C ++ yang diwarisi. Adakah yang bisa menjelaskan hal ini?
Semoga itu bisa membantu,
Lee.
sumber
Vector3D
kelas di Obj-C? Perasaan saya memberi tahu saya bahwa hal itu dapat menyebabkan kinerja yang buruk.Tergantung apa tepatnya Anda pemrograman. Jika itu terutama logika game menggunakan fisika dan mesin grafis yang ada, saya dapat dengan aman mengatakan saya tidak melihat alasan untuk menggunakan c atau c ++ jika Anda lebih nyaman dengan obj-c. Jika Anda akan meluncurkan rendering atau kelas fisika saya mungkin akan menulis yang menggunakan c atau c ++. Cocos2d - yang luar biasa dan salah satu perpustakaan permainan iOS paling populer ditulis di obj-c.
Lihatlah bacaan ini - bagian yang relevan adalah "pembagian kerja", mungkin dapat membantu Anda memutuskan kapan akan membuat kode dalam bahasa tingkat yang lebih tinggi dan kapan menggunakan tingkat yang lebih rendah: Kode yang dikelola dalam permainan
Sementara overhead objektif-c tidak boleh berada di dekat C # dan bahkan tidak dikelola (di iOS), saya percaya logika masih berlaku, dan perangkat yang menjalankan iOS juga tidak sedekat PC yang akan menafsirkan MSIL :)
sumber
Studi ini mengatakan untuk benar-benar mendapatkan kinerja dalam permainan intensif CPU, Anda harus menggunakan C. Artikel yang ditautkan lengkap dengan proyek XCode yang dapat Anda jalankan.
Saya percaya intinya adalah: Gunakan Objective-C di mana Anda harus berinteraksi dengan fungsi iPhone (setelah semua, menempatkan trampolin di mana-mana tidak baik bagi siapa pun) ), tetapi ketika datang ke loop, hal-hal seperti kelas objek vektor, atau intensif akses array, tetap dengan C ++ STL atau array C untuk mendapatkan kinerja yang baik.
Maksud saya itu benar-benar konyol untuk dilihat
position = [[Vector3 alloc] init] ;
. Anda hanya meminta hit kinerja jika Anda menggunakan referensi mengandalkan objek dasar seperti vektor posisi.Lihat juga perbandingan ini,
sumber