Có thể lập trình iPhone trong C ++ không


124

Tôi là tất cả cho sự đa dạng ngôn ngữ, nhưng Mục tiêu C là điên rồ. Vì vậy, tôi tò mò: có thể mã hóa các ứng dụng iPhone bằng C ++ trong khi sử dụng API API, v.v.?

Câu trả lời:


57

Câu trả lời ngắn, vâng, loại. Bạn có thể sử dụng Objective-C ++ mà bạn có thể đọc tại Kết nối nhà phát triển của Apple.

Nếu bạn đã biết C ++, việc học Objective-C sẽ khá đơn giản, nếu bạn quyết định thử. Thông tin thêm về chủ đề đó là tại ADC.


1
bạn có thể giới thiệu một trang web hoặc cuốn sách dành cho các lập trình viên C ++ có kinh nghiệm để học Objective-C không? Tôi đã quản lý để trộn một vài ứng dụng thử nghiệm cùng nhau, nhưng tôi thấy cú pháp hơi ngược và tôi chắc chắn rằng tôi đang làm những việc dẫn đến rò rỉ bộ nhớ, v.v. chỉ vì thiếu kiến ​​thức về Objective-C
Lea Hayes

3
@LeaHayes Một cuốn sách miễn phí có tên "Từ C ++ đến Objective-C". Giả sử bạn biết C ++ và sau đó cho bạn biết mọi thứ được thực hiện khác nhau như thế nào trong Objective-C. pierre.chachatelier.fr/programmation/fichiers/cpp-objc-en.pdf (đây là bản dịch tiếng Anh của tiếng Pháp gốc)
olafure

61

Mặc dù Objective-C thực sự có vẻ "điên rồ" ban đầu, tôi khuyến khích bạn nên gắn bó với nó. Khi bạn có một khoảnh khắc "a-ha", đột nhiên tất cả bắt đầu có ý nghĩa. Đối với tôi, tôi mất khoảng 2 tuần tập trung vào Mục tiêu-C tập trung để thực sự hiểu các khuôn khổ Ca cao, ngôn ngữ và cách tất cả khớp với nhau. Nhưng một khi tôi thực sự "hiểu" nó, nó rất rất thú vị.

Nghe có vẻ sáo rỗng, nhưng đó là sự thật. Dính nó ra.

Tất nhiên, nếu bạn đang mang vào thư viện C ++ hoặc mã C ++ hiện có, bạn có thể sử dụng các mô-đun đó với Objective-C / Objective-C ++.


42

Tôi sử dụng Objective-C để tát UI cùng nhau.
Nhưng ruột cứng của mã vẫn được viết bằng C ++.

Đó là mục đích chính của Objective-C giao diện UI và xử lý các sự kiện.
Và nó hoạt động tuyệt vời cho mục đích đó.

Mặc dù vậy, tôi vẫn thích C ++ là phần phụ trợ cho mã (nhưng chủ yếu là vì tôi thích C ++), bạn cũng có thể dễ dàng sử dụng Objective-C cho phần phụ trợ của ứng dụng.


9
@Spanky: Làm thế nào o tôi làm chính xác. Bạn có thể viết C bình thường trong tệp * .m. Bạn có thể viết C ++ bình thường trong các tệp * .mm (Objective-C ++). Bên trong các tệp Objective-C (++), bạn có thể sử dụng bình thường #include <XXX>như các tệp C / C ++.
Martin York

28

Trước hết, nói Objective-C là "điên rồ" là hài hước - Tôi có cuốn sách Bjarne Stroustrup C ++ ngồi bên cạnh tôi, đồng hồ ở 1020 trang. PDF của Apple trên Objective-C là 141.

Nếu bạn muốn sử dụng UIKit, sẽ rất khó để bạn có thể làm bất cứ điều gì trong C ++. Bất kỳ ứng dụng iPhone nghiêm túc nào phù hợp với giao diện người dùng của Apple sẽ cần các phần UI của nó được viết bằng Objective-C. Chỉ khi bạn đang viết một trò chơi OpenGL, bạn mới có thể gắn bó gần như hoàn toàn với C / C ++.


30
Từ khi nào ít tài liệu là một điều tốt? "Ngôn ngữ lập trình C ++" rất kỹ lưỡng và cũng là tài liệu của STL.
Timmmm

2
@Timmmm: Kể từ khi K & R đưa ra quan điểm đó trong các vấn đề chính của cuốn sách của họ. Objective-C là một ngôn ngữ nhỏ hơn nhiều so với C ++, với nhiều lợi ích giống nhau (và một số lợi ích khác). Tất cả mọi thứ đều đánh đổi. Nhưng tài liệu tối thiểu làm cho Obj-C khá dễ dàng cho những người có kinh nghiệm về C (hoặc C ++) có thể bắt kịp tốc độ.
Ben Zotto

62
Xin lỗi nhưng ObjC là điên rồ. Sự nhấn mạnh về một cách hoàn toàn khác nhau để khai báo các hàm, việc sử dụng dấu ngoặc. Nó khác biệt không có lợi. Họ có thể đã phác thảo cùng một ngôn ngữ hiệu quả mà không cần cú pháp lố bịch. Họ đã chọn không. Vì vậy, nó điên rồ.
hoàng

13
@Rhubarb - Mặc dù tôi thích Objective-C Tôi phải đồng ý rằng cú pháp kỳ lạ đó không phục vụ mục đích.
Raphael

@Rhubarb, Yup, hãy nhớ rằng Apple là công ty phát sinh ra sự điên rồ đó và Apple khác biệt với mục đích duy nhất là khác biệt.
SeanRamey

14

Có một số kinh nghiệm về điều này, bạn thực sự có thể sử dụng mã C ++ cho mã "lõi" của mình, nhưng bạn phải sử dụng object-C cho bất kỳ thứ gì cụ thể của iPhone.

Đừng cố ép Objective-C hành động như C ++. Lúc đầu, dường như điều này là có thể với bạn, nhưng mã kết quả thực sự sẽ không hoạt động tốt với Ca cao và bạn sẽ rất bối rối về những gì đang diễn ra. Dành thời gian để tìm hiểu đúng cách, không có bất kỳ C ++ nào, cách xây dựng GUI và ứng dụng iPhone, sau đó liên kết trong cơ sở C ++ của bạn.


3

Bạn phải sử dụng Objective C để giao diện với API ca cao, vì vậy không có lựa chọn nào khác. Tất nhiên, bạn có thể sử dụng bao nhiêu C ++ tùy thích trong hậu trường (Objective C ++ giúp việc này trở nên dễ dàng).

Đó thực sự là một ngôn ngữ điên rồ, nhưng nó cũng ... thú vị khi sử dụng một khi bạn đã quen với nó. :-)



2

Tôi đang trong quá trình chuyển một ứng dụng Android chuyên sâu tính toán được viết bằng Java sang iOS6. Tôi đang làm điều này bằng cách chuyển các phần không phải UI từ Java sang C ++, viết các phần UI (tối thiểu) trong Obj-C và gói phần trước trong giao diện C (nhỏ) bằng kỹ thuật C / C ++ tiêu chuẩn, sao cho nó có thể được truy cập từ Obj-C, sau tất cả là siêu nhóm C.

Điều này đã có hiệu quả cho đến nay và tôi đã không gặp phải bất kỳ vấn đề nào. Nó dường như là một cách tiếp cận hợp pháp, vì Xcode cho phép bạn tạo các lớp C ++ cũng như các lớp Obj-C và một số mã mẫu chính thức thực hiện theo cách này. Tôi đã không phải đi ra ngoài bất kỳ giao diện được hỗ trợ chính thức để làm điều này.

Dường như sẽ không có nhiều lợi ích từ việc viết mã UI còn lại của tôi trong C ++ ngay cả khi có thể, theo quan điểm về sự giúp đỡ của người xây dựng giao diện trong Xcode, vì vậy câu trả lời của tôi là bạn có thể sử dụng C ++ cho hầu như tất cả các ứng dụng của bạn, hoặc nhiều như bạn thấy phù hợp / thuận tiện.


2

Có nhưng Nghĩ rằng bạn có thể lập trình mọi loại chương trình bằng một ngôn ngữ là một ý tưởng thiếu sót trừ khi bạn đang viết các chương trình rất đơn giản. Mục tiêu C là dành cho Cacao vì C # dành cho .NET, Sử dụng công cụ phù hợp cho công việc phù hợp, Cố gắng làm cho C ++ tương tác với Cốc Cốc thông qua việc viết mã cầu nối và cố gắng làm cho mã C ++ hoạt động theo yêu cầu của Cacao không phải là một ý tưởng tốt. hiệu suất từ ​​Mục tiêu C là. Bạn nên cố gắng bố trí thiết kế và kiến ​​trúc của ứng dụng để theo dõi các kỹ năng hiện có và xác định phần nào sẽ được viết bằng ngôn ngữ nào sau đó xây dựng cho phù hợp.


0

Hiện tại tôi đang viết một khung công tác Objective-C ++ có tên là Objective-X, chúng tôi có thể lập trình PURE C ++ iPHONE. Bạn có thể làm như thế này:

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

và biên dịch nó bằng các tùy chọn dòng lệnh thích hợp của GCC. Tôi đã biên soạn ứng dụng hellowworld này và nó w0rkX0rz như một sự quyến rũ. ;-) Nó sẽ sớm xuất hiện trên GoogleCode. Tìm kiếm Objective-X hoặc truy cập http://infotronix.orgfree.com/objectivex khoảng. một tuần sau!

URL được cập nhật (nhưng dường như không hoạt động): http://code.google.com.vn/p/objectivex/


4
Tại sao không chờ đợi với việc đăng cho đến khi nó thực sự có sẵn?
Georg Fritzsche

8
Cả hai liên kết đều là 404 ngay bây giờ
Zhao Xiang

1
Theo SourceForge: "Kể từ 2014-01-24, dự án này không còn được phát triển tích cực." sourceforge.net/projects/objectivex
JAL

0

Nó có thể là một chút offtopic, nhưng dù sao. Bạn có thể lập trình c ++ ngay trên thiết bị iOS. Kiểm tra ứng dụng CppCode ios - http://cppcode.info . Tôi tin rằng nó giúp học c và c ++ và object-c sau này.

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.