2010-07-24 13 views
13

Edit: xấu của tôi, tôi có nghĩa là mục tiêu-c, không C#. Một số lý do tôi đã nhận nó vào đầu của tôi nó đã được C# iphone được sử dụng. Vì vậy, các câu trả lời cho C# là tuyệt vời, cảm ơn, nhưng họ là một chút không liên quan, xin lỗi về điều đó.Có sự khác biệt lớn nào giữa mục tiêu-c và Java hay iPhone và Android không?

Tôi đã có một cái nhìn nhưng không thể tìm thấy bất cứ điều gì mà câu trả lời này, mặc dù một vài đã rút ngắn câu hỏi bằng cách trả lời các phần của nó. Giữa một nhóm nhỏ, chúng tôi đã lên kế hoạch thực hiện một số công việc trên iPhone và Android, 2 riêng biệt cho hầu hết các phần nhưng giúp đỡ lẫn nhau, và với một số kẻ làm việc đồ họa phân chia giữa chúng.

Nhưng chúng tôi đã suy nghĩ về khả năng di chuyển mọi thứ giữa hai ứng dụng, không nhất thiết là ứng dụng, có thể chỉ là các lớp hữu ích hoặc một thứ gì đó. Nhìn vào mục tiêu-c và Java, chúng dường như có cùng một tính năng mà trở ngại lớn nhất sẽ là giao diện hệ thống, vì vậy chúng tôi đã tự hỏi liệu chúng ta có tạo ra sự trừu tượng hóa trên mỗi hệ thống hay không (mà trừ khi tôi sai sẽ không đặt quá nhiều căng thẳng trên hệ thống?), sẽ có bất kỳ vấn đề trong văn bản một cái gì đó để chuyển đổi giữa mục tiêu-c và Java, tồi tệ hơn so với các địa điểm của các phương pháp trong sdks? Hoặc là có các tính năng chính hoặc một cái gì đó trong một ngôn ngữ mà người khác không có mà chúng tôi đã bỏ lỡ đó có nghĩa là cách duy nhất để làm điều đó sẽ được viết lại từ đầu.

+0

Err ... Nó được đề cập một vài lần trong câu trả lời dưới đây nhưng chỉ để chỉ ra ... ** iPhone được lập trình trong Objective-C, không C#. ** (C# là một công nghệ của Microsoft, có lẽ bạn có thể lập trình Windows Phone 7 trong đó) – Ricket

+0

Windows Phone 7 có thể được lập trình trong C# (và chỉ C#, bây giờ).Bạn cũng có một sự lựa chọn giữa Silverlight và XNA cho hỗ trợ giao diện người dùng trong Windows Phone 7. –

+2

Thực ra, có các gói và công cụ Mono hỗ trợ việc sử dụng C# trong việc phát triển các ứng dụng iPhone, iPod Touch và iPad. –

Trả lời

0

Bạn không thể phát triển cho iPhone bằng ngôn ngữ giống như đối với Android. Đối với iPhone, bạn chỉ có thể lập trình trong Objective C, nó được phát triển bởi Apple. Bạn không thể sử dụng nó cho android, và cách duy nhất để làm phát triển iPhone là với ngôn ngữ đó (đó là trong thỏa thuận người dùng).

Đối với C# so với Java, toàn bộ nguyên tắc là khác nhau. Java là một ngôn ngữ cho mọi nền tảng .Net là một nền tảng cho mọi ngôn ngữ. Chúng không tương thích. Bạn có thể sử dụng Java trên Android, nhưng tôi không chắc liệu bạn có thể sử dụng C# (.Net) hay không.

Dù sao, bạn sẽ phải xây dựng hai ứng dụng khác nhau cho hai hệ điều hành di động này.

+0

J + + không còn được hỗ trợ. –

+0

Nó tồn tại mặc dù. Tôi sẽ chỉnh sửa để làm cho nó rõ ràng hơn. –

+0

J + + đã chết. Microsoft đã phá hủy nó và di chuyển mọi người đến nhóm C# năm trước. Tất cả đều sụp đổ từ các tranh chấp pháp lý giữa MS và Sun. Các ngôn ngữ .NET chạy trên nền tảng Unix (Mac, Linux, v.v.) sử dụng nền tảng nguồn mở Mono, mà Microsoft hỗ trợ. Tôi hiểu rằng họ đang hỗ trợ Android. Họ đã hỗ trợ phát triển iPhone cho đến khi thay đổi giấy phép gần đây của Apple cắt đứt mọi thứ nhưng phát triển Objective-C bản địa. –

3

Nếu bạn tập trung vào việc trừu tượng hóa những thứ như tương tác hệ thống và dính vào tập con chung của ngôn ngữ, bạn có thể xây dựng các lớp đòi hỏi ít hoặc không có sửa đổi để chuyển từ ngôn ngữ này sang ngôn ngữ khác.

C# có thực hiện tốt hơn các Generics hơn Java, trong đó C# của generics giữ gõ mạnh mẽ tại thời gian chạy.

C# cũng có LINQ, theo như tôi biết không có tương đương (chưa) trong Java. LINQ cung cấp khả năng truy vấn giống SQL, được xây dựng trong ngôn ngữ và được hỗ trợ đầy đủ bởi .NET frameowrk, cho phép bạn truy vấn các bộ sưu tập đối tượng và thực hiện theo kiểu ngôn ngữ rất chức năng. LINQ có thể được mở rộng bởi các nhà cung cấp truy vấn để làm việc với các định dạng dữ liệu khác, chẳng hạn như XML và SQL, một khi nhà cung cấp truy vấn cung cấp một mô hình đối tượng dịch sang định dạng khác. LINQ cũng làm cho việc song song rất dễ dàng cho công việc đa lõi. Đó là một phần mở rộng rất lớn đối với khả năng ngôn ngữ.

0

Nếu bạn đang suy nghĩ về việc phát triển Android, lời khuyên tốt nhất của tôi là dùng java. Không có lợi ích nào khi viết một lớp trừu tượng hoàn chỉnh (giả sử bạn có thể) để chuyển đổi từ C# thành Java. Đối với sự phát triển IPhone không nghi ngờ về việc sử dụng Objective-C cho cùng một mục đích.

4

Các công cụ như XMLVM, Codename OneiSpectrum cho chúng tôi biết rằng bạn có thể thực sự xuyên biên dịch mã Java (từ một ứng dụng Android hoặc tạo một từ đầu) đến mã Objective-C đang chạy trên iPhone mà không phải cài đặt bất kỳ máy ảo nào trên Apple.

Tôi đề nghị xem Developing iPhone Applications using Java

Thật không may của Apple giấy phép thỏa thuận cho iPhone SDK cấm porting của máy ảo Java cho iPhone. Trong trình bày này chúng tôi giới thiệu một mở Nguồn Java-to-Objective-C cross-biên dịch cũng như dựa trên nền Java thực hiện của thư viện Cocoa. Với sự trợ giúp của các công cụ này, ứng dụng iPhone có thể được viết bằng Java thuần túy . Sử dụng phiên bản Java của Cocoa, có thể chạy ứng dụng iPhone dựa trên Java dưới dạng ứng dụng Java trên máy tính để bàn/applet có thể được biên dịch chéo để chạy tự nhiên trên điện thoại . Bài nói chuyện sẽ thảo luận về các thách thức của trình biên dịch chéo Java-to-Objective-C cũng như phiên bản dựa trên Java dựa trên Java. Chi tiết có sẵn tại http://www.xmlvm.org/

và cho cái nhìn sâu sắc hơn một cuộc nói chuyện gần đây thêm về Cross-Biên soạn các ứng dụng Android cho iPhone từ Frebruary 2010 là có sẵn here, được ghi nhận tại http://www.xmlvm.org/android/:

Android là nền tảng nguồn mở cho thiết bị di động. Được khởi xướng bởi Google, Android đã nhận được nhiều sự chú ý. Các ứng dụng Android được phát triển bằng cách sử dụng Java, mặc dù một trình biên dịch đặc biệt chuyển đổi các tệp lớp thành một máy ảo dựa trên đăng ký độc quyền được sử dụng trên các thiết bị Android để thực thi các ứng dụng. Android định nghĩa API riêng của mình để viết các ứng dụng di động. Với sự trợ giúp của XMLVM, có thể biên dịch chéo các ứng dụng Android dựa trên Java cho các ứng dụng iPhone nguyên bản.

Ứng dụng Android được viết bằng Java và tận dụng Android API cụ thể. XMLVM cung cấp thư viện tương thích , được viết bằng Java, cung cấp cùng một API như Android, nhưng chỉ sử dụng APIdựa trên Java cho Cocoa Touch. Trong quá trình xuyên biên soạn, cả ứng dụng và thư viện tương thích Android là cross-biên soạn từ Java để Objective-C và liên kết với các thư viện tương thích cảm ứng Cocoa để tạo ra một ứng dụng iPhone có nguồn gốc .

Từ năm 2008 nói về việc xây dựng các ứng dụng Java cho iPhone http://www.xmlvm.org/iphone/:

iPhone của Apple đã tạo ra quan tâm rất lớn giữa người dùng và các nhà phát triển như nhau. Giống như MacOS X, môi trường phát triển iPhone dựa trên Mục tiêu-C là ngôn ngữ phát triển và Cocoa cho GUI thư viện. Giấy phép SDK SDK thỏa thuận không cho phép phát triển của máy ảo. Sử dụng XMLVM, chúng tôi phá vỡ vấn đề này bằng cách biên dịch Java sang điện thoại . Cũng giống như một ứng dụng Java có thể được biên dịch chéo sang AJAX, XMLVM có thể được sử dụng để biên dịch một ứng dụng Java thành Objective-C. Việc biên dịch chéo cũng được thực hiện bằng cách bắt chước một máy dựa trên ngăn xếp trong Mục tiêu-C.

+2

Chính xác lý do tại sao tôi quyết định bỏ qua phát triển iphone ... chưa kể rằng bạn phải có hàm và xu hướng mạnh mẽ để cung cấp cho Apple sự kích thích bằng miệng để có được một ứng dụng được phê duyệt. – androidworkz

+0

Bạn không phải luôn luôn phải làm mọi thứ một cách khó khăn. – overboming

+0

Không khó để có được một ứng dụng được chấp thuận. –

1

Nếu bạn thực sự muốn thực hiện phát triển qua điện thoại, miễn là nó không phải là một cái gì đó thực sự tốn kém tính toán, tôi có thể sẽ đi với PhoneGap.

PhoneGap là một khung phát triển nguồn mở để xây dựng các ứng dụng di động đa nền tảng. Xây dựng ứng dụng bằng HTML và JavaScript và vẫn tận dụng được các tính năng chính trong iPhone/iTouch, iPad, Google Android, Palm, Symbian và Blackberry SDK.

Theo như tôi có thể nói, nó là khá nhiều bộ công cụ nền tảng duy nhất được phép trong cửa hàng ứng dụng iPhone.

Nếu bạn đã chết khi phát triển bản địa, tôi nghĩ bạn sẽ thấy rằng trừ khi bạn đang thực hiện trò chơi và nhắm mục tiêu c, sẽ có rất nhiều việc để chuyển. Các khung công tác rất khác nhau và cách xây dựng giao diện người dùng rất khác nhau. Điều đó nói rằng, để trả lời câu hỏi trực tiếp của bạn về mục tiêu-c so với java, nó không phải là xấu. Tuy nhiên, nó là đủ khác nhau, rằng một công cụ trừu tượng sẽ không dễ dàng như vậy - không giống như Java vs C#. Mục tiêu-c không có bộ sưu tập rác (trên iPhone anyway), ví dụ, và cú pháp là rất khác nhau. Mục tiêu-c được gõ lỏng lẻo hơn theo cách mà nó gọi các phương thức (các thông điệp trong mục tiêu-c). Điều đó nói rằng, họ không phải là cực kỳ khác nhau về các mô hình lập trình. Cả hai đều là ngôn ngữ mệnh lệnh hướng đối tượng. Cả hai đều có các lớp và phương pháp, công khai và riêng tư. Nếu bạn muốn chuyển mã bằng tay, nó sẽ không phải là kết thúc của thế giới, tôi chỉ nghĩ rằng bạn có thể gió lên chi tiêu rất nhiều thời gian hơn cố gắng để xây dựng một lớp trừu tượng.

+1

Tương tự PhoneGap là Titanium (http://www.appcelerator.com/) cho phép bạn tạo các ứng dụng dành cho thiết bị di động và máy tính để bàn * bản địa với công nghệ web. Tôi không biết nếu Java sẽ có sẵn cho iPhone, iPad nhưng C# thông qua http://monotouch.net/ dự án đã có và một số ứng dụng được chấp nhận, xem http://monotouch.info/MonoTouch/Apps – bitek

+0

Chỉ cần dự án phát hiện và thú vị được gọi là iSpectrum, (ngoài dự án XMLVM đã được mô tả trong phần trả lời) cho phép bạn xây dựng các ứng dụng Java cho iPhone, hãy xem http://www.flexycore.com./ispectrum-overview.html – bitek

52

Tôi sẽ không lãng phí thời gian để tìm sự tương đồng giữa iOS và Android.

Đa nền tảng hầu như luôn lãng phí thời gian và tài nguyên trừ khi khả năng đa nền tảng là trung tâm của các ứng dụng hoạt động. Điều đó đặc biệt đúng đối với các nền tảng như iPhone và Android có hệ điều hành tùy chỉnh và hoạt động rất chặt chẽ với phần cứng.

Môi trường phát triển đa nền tảng thêm thay vì giảm độ phức tạp lâu dài. Vâng, nó có vẻ gọn gàng nhưng thường bạn nhận được 90% những gì bạn muốn một cách dễ dàng và sau đó bạn đánh một rào cản phá hủy tất cả các khoản tiết kiệm bạn đã thực hiện và sau đó bắt đầu đưa bạn vào lỗ. Chỉ đơn giản là để nhiều thỏa hiệp và chốt vuông kẹt vào lỗ tròn.

Trừ khi ứng dụng của bạn có thể về lý thuyết hoạt động từ một trang web chung, nền tảng không dành cho bạn.

Trong trường hợp cụ thể của Mục tiêu-C và Java, mặc dù Java là hậu duệ của Objective-C, chúng không có khả năng tương tác hiện đại. Bạn không thể sử dụng mã từ cái này sang cái kia.

Bạn nên dành thời gian tìm hiểu API cụ thể của mỗi nền tảng. Không có vết cắt ngắn.

+4

Đây là hiền triết tư vấn cho giao diện người dùng crossplatform, nhưng không phải tất cả mã đa nền tảng. – jamesh

+2

Lời khuyên rất tốt. Và rất gọn gàng để tiếp tục. Nhưng những người đã mong muốn làm nền tảng chéo sẽ không chấp nhận nó ... –

3

Chủ đề này thường được lấp đầy với giáo điều của công nghệ thánh chiến, vì vậy tôi sẽ cố gắng và tránh xa điều đó trong câu trả lời của tôi.

Theo kinh nghiệm của tôi, tôi sẽ đồng ý với những người nói rằng cố gắng chia sẻ mã giữa hai nền tảng sẽ rất khó khăn. Tuy nhiên, có một số trường hợp ngoại lệ quan trọng:

tôi sẽ xem xét phát triển đa nền tảng nơi logic kinh doanh của bạn:

  • là không tầm thường;
  • nên được chuẩn hóa trên các nền tảng; và
  • có tương tác được xác định rõ ràng với thế giới bên ngoài (ví dụ: ngăn xếp mạng hoặc giao diện người dùng).
  • (tiền thưởng) đã được viết.

Apple là bước xác định tỷ lệ tại đây, với giới hạn 3.3.1 khét tiếng về ngôn ngữ mã nguồn. Bạn có thể viết mã bằng Javascript theo Webkit đi kèm, C, C++ và Mục tiêu C.

Nếu bạn không muốn cài đặt thêm ngôn ngữ trên 'droid, bạn có thể sử dụng Java để biên dịch mã dalvik, Javascript theo bản dựng webkit hơi khác hoặc một thứ gì đó từ NDK. Sau đó, bạn sẽ xem xét C/C++. Bạn có thể cross-compile Objective-C, nhưng tôi đã không có bất kỳ kinh nghiệm nào về điều đó.

Việc tách biệt logic nghiệp vụ khỏi giao diện người dùng và mạng là quan trọng, vì bạn sẽ tìm cách viết bộ điều hợp cho lớp mạng, một thứ khác cho giao diện người dùng.

Tôi sẽ không cố gắng viết nền tảng chéo Mã UI bằng C/C++ và viết một cái gì đó sử dụng HTML/CSS/JS hoặc nhiều khả năng viết một cái gì đó hoàn toàn tùy chỉnh để tận dụng các ẩn dụ UI khác nhau trên mỗi nền tảng - ví dụ không có sự tương tự với thanh thông báo trên iPhone. Hoạt hình trên iPhone là đơn đặt hàng có cường độ đơn giản hơn so với trên Android.

Nếu bạn không cần giao diện người dùng được tích hợp ồ ạt với hệ điều hành, thì một lần xem web và một số HTML5 có thể là đủ. Titanium là một lựa chọn tốt ở đây, và các đồng nghiệp của tôi trong biết cho tôi biết nó là tốt hơn (tức là biên dịch, không giải thích) hơn PhoneGap. Một lần nữa tôi không biết.

Đi theo một cách khác phức tạp, Mở GLES có sẵn trên cả hai nền tảng.

Cũng cần lưu ý rằng SVG không khả dụng trên vụ mùa hiện tại của hệ điều hành Android.