Làm cách nào để quyết định giữa MonoTouch và Objective-C? [đóng cửa]


273

Sau khi ngồi qua một phiên hôm nay trên Mono tại một sự kiện .Net địa phương, việc sử dụng MonoTouch đã được 'chạm vào' như một cách thay thế để phát triển iPhone. Rất thoải mái trong C # và .Net, nó có vẻ như là một lựa chọn hấp dẫn, mặc dù có một số điểm khó hiểu của ngăn xếp Mono. Tuy nhiên, vì MonoTouch có giá 400 đô la, tôi hơi khó chịu nếu đây là cách để phát triển iPhone.

Bất cứ ai cũng có kinh nghiệm phát triển với MonoTouch và Objective-C, và nếu vậy thì việc phát triển với MonoTouch có đơn giản và nhanh chóng hơn nhiều so với việc học Objective-C, và lần lượt trị giá 400 đô la?


13
Tôi nghĩ rằng rất nhiều ý kiến ​​về việc MonoTouch không thể chạy trên iOS là không hợp lệ nữa vì Apple đã hạn chế các công cụ dev của mình. Xem: apple.com/pr/l
Library 2010/09 / 09statement.html

Câu trả lời:


520

Gần đây tôi đã thấy câu hỏi này (và các biến thể của nó). Điều làm tôi ngạc nhiên là tần suất mọi người trả lời, nhưng có bao nhiêu câu trả lời .

Tôi có sở thích của mình (tôi thích cả hai ngăn xếp), nhưng đây là lúc hầu hết các "câu trả lời" bắt đầu sai. Nó không phải là về những gì tôi muốn (hoặc những gì người khác muốn).

Đây là cách tôi đi về việc xác định giá trị của MonoTouch - rõ ràng tôi không thể khách quan, nhưng tôi nghĩ rằng điều này khá nhiệt tình:

  • Đây là cho vui hay kinh doanh? Nếu bạn muốn được tư vấn trong lĩnh vực này, bạn có thể kiếm lại $ 399 rất nhanh.

  • Bạn có muốn tìm hiểu nền tảng từ trong ra ngoài, hoặc bạn "chỉ" muốn viết ứng dụng cho nó?

  • Bạn có thích .Net đủ để sử dụng ngăn xếp dev khác nhau sẽ mang lại niềm vui cho bạn không? Một lần nữa, tôi thích cả hai ngăn xếp (Apple và Mono), nhưng đối với tôi MonoTouch làm cho trải nghiệm đó thú vị hơn nhiều. Tôi đã không ngừng sử dụng các công cụ của Apple, nhưng điều đó chủ yếu là vì tôi thực sự thích cả hai ngăn xếp . Tôi yêu iPhone, và tôi yêu .Net. Trong trường hợp đó, đối với tôi, MonoTouch là một người không có trí tuệ.

  • Bạn có cảm thấy thoải mái khi làm việc với C không? Tôi không có nghĩa là Objective-C, nhưng C - nó quan trọng bởi vì Objective-C C. Đây là một phiên bản OO đẹp, lạ mắt, thân thiện, nhưng nếu con trỏ cho bạn những con bò cái, MonoTouch là bạn của bạn. Và đừng lắng nghe những người không tán thành, những người nghĩ rằng bạn là một nhà phát triển nếu điều đó xảy ra rằng bạn không thích con trỏ (hoặc C, v.v.). Tôi đã từng đi bộ xung quanh với một bản sao Tài liệu tham khảo bỏ túi BIOS ROM của IBM và khi tôi đang viết lắp ráp và buộc máy tính của mình vào các chế độ video vui nhộn và viết các bit kết xuất phông chữ của riêng mình cho chúng và các hệ thống cửa sổ (phải thừa nhận là rác rưởi), tôi đã không Chúng tôi nghĩ rằng các nhà phát triển QuickBasic là những người ồn ào. Tôi đãmột dev QuickBasic (ngoài phần còn lại). Không bao giờ nhượng bộ cho mọt sách mọt sách. Nếu bạn không thích C, và nếu bạn không thích con trỏ, và nếu bạn muốn tránh xa việc quản lý bộ nhớ thủ công nhất có thể (và, công bằng mà nói, điều đó không tệ chút nào trong ObjC), sau đó. .. MonoTouch. Và đừng lấy bất kỳ guff nào cho nó.

  • Bạn có muốn nhắm mục tiêu người dùng hoặc doanh nghiệp? Nó không quan trọng với tôi, nhưng vẫn có những người ở đó trên Edge và thực tế là: bạn có thể tạo gói tải xuống nhỏ hơn nhiều nếu bạn sử dụng ngăn xếp của Apple. Tôi đã chơi xung quanh với MonoTouch và tôi có một ứng dụng nhỏ khá hay, sau khi được nén, xuống còn khoảng 2,7 MB (khi gửi ứng dụng của bạn để phân phối, bạn nén nó - khi các ứng dụng được tải xuống từ cửa hàng, chúng ' được nén lại - vì vậy khi tìm hiểu xem ứng dụng của bạn có xuất hiện dưới giới hạn OTA 10 MB hay không, hãy nén trình hút trước - bạn sẽ ngạc nhiên với MonoTouch). Nhưng, hạnh phúc sang một bên, nửa meg so với gần ba (ví dụ) là điều có thể quan trọng với bạn nếu bạn nhắm mục tiêu người dùng cuối. Nếu bạn đang nghĩ về công việc doanh nghiệp, một vài MB sẽ không thành vấn đề. Và, chỉ cần rõ ràng - tôi sẽ sớm gửi một ứng dụng dựa trên MT đến cửa hàng và tôi không gặp vấn đề gì với kích thước. Không làm phiền tôi chút nào. Nhưng nếu đó là điều đáng quan tâmbạn , sau đó ngăn xếp của Apple thắng cái này

  • Làm bất kỳ công việc XML? MonoTouch. Giai đoạn = Stage.

  • Thao tác chuỗi? Ngày thao túng? Hàng triệu thứ nhỏ khác mà chúng ta đã quen với các khung công việc tất cả mọi thứ-VÀ-nhà bếp-bồn rửa của .Net? MonoTouch.

  • Dịch vụ web? MonoTouch.

  • Cú pháp, cả hai đều có lợi thế của họ. Mục tiêu-C có xu hướng dài dòng hơn khi bạn phải viết nó . Bạn sẽ thấy mình viết mã bằng C # bạn sẽ không phải viết bằng ObjC, nhưng nó đi cả hai chiều. Chủ đề đặc biệt này có thể lấp đầy một cuốn sách. Tôi thích cú pháp C #, nhưng sau khi vượt qua phản ứng ban đầu này là thế giới khác với Objective-C, tôi đã học cách tận hưởng nó khá nhiều. Tôi làm cho niềm vui của nó một chút trong cuộc đàm phán (nó lạ cho devs người đang sử dụng để C # / Java / etc.), Nhưng sự thật là tôi có một Objective-C hình tại chỗ trong trái tim tôi mà làm cho tôi hạnh phúc.

  • Bạn có kế hoạch sử dụng Interface Builder không? Bởi vì, ngay cả trong phiên bản đầu tiên này, tôi thấy mình làm việc ít hơn nhiều để xây dựng UI của mình với IB và sau đó sử dụng chúng trong mã. Có cảm giác như toàn bộ các bước bị thiếu trong cách thực hiện Mục tiêu-C / IB và tôi khá chắc chắn rằng vì toàn bộ các bước bị thiếu trong cách thực hiện Mục tiêu-C / IB. Cho đến nay, và tôi không nghĩ rằng mình đã thử nghiệm đầy đủ, nhưng cho đến nay , MonoTouch là người chiến thắng ở đây vì bạn phải làm ít hơn bao nhiêu công việc.

  • Bạn có nghĩ thật thú vị khi học các ngôn ngữ và nền tảng mới không? Nếu vậy, iPhone có rất nhiều thứ để cung cấp và ngăn xếp của Apple có thể sẽ đưa bạn ra khỏi vùng thoải mái của bạn - điều mà đối với một số nhà phát triển là thú vị (Xin chào - Tôi là một trong những nhà phát triển đó - Tôi nói đùa về nó và cho Apple đã có một thời gian khó khăn, nhưng tôi đã có rất nhiều niềm vui khi học phát triển iPhone thông qua các công cụ của Apple).

Có rất nhiều điều để xem xét. Giá trị rất trừu tượng. Nếu chúng ta đang nói về chi phí và liệu nó có xứng đáng hay không, câu trả lời sẽ thuộc về mục đầu tiên của tôi: nếu đây là cho công việc và nếu bạn có thể có được công việc, bạn sẽ kiếm lại tiền ngay.

Vì vậy, ... đó là về khách quan như tôi có thể. Đây là một danh sách ngắn về những gì bạn có thể tự hỏi mình, nhưng nó là điểm khởi đầu.

Cá nhân (hãy bỏ sự khách quan trong giây lát), tôi yêu và sử dụng cả hai. Và tôi rất vui vì tôi đã học được Apple stack đầu tiên. Tôi dễ dàng hơn để đứng dậy và chạy với MonoTouch khi tôi đã biết đường đi khắp thế giới của Apple. Như những người khác đã nói, bạn vẫn sẽ làm việc với CocoaTouch - nó sẽ ở trong một môi trường bị đóng băng .Net.

Nhưng có nhiều hơn thế. Những người chưa sử dụng MonoTouch có xu hướng dừng lại ở đó - "Đó là một gói bọc blah blah blah" - đó không phải là MonoTouch.

MonoTouch cung cấp cho bạn quyền truy cập vào những gì mà Cốc Cốc cung cấp, đồng thời cho phép bạn truy cập vào những gì (một tập hợp con) .Net phải cung cấp, một số IDE cảm thấy thoải mái hơn (Tôi là một trong số họ), tích hợp tốt hơn với Trình tạo giao diện và mặc dù bạn không thể quên hoàn toàn việc quản lý bộ nhớ, bạn sẽ có được một mức độ chậm trễ.

Nếu bạn không chắc chắn, hãy lấy ngăn xếp của Apple (miễn phí) và lấy ngăn xếp của MonoTouch (miễn phí). Cho đến khi bạn tham gia chương trình phát triển của Apple, cả hai sẽ chỉ chạy với trình giả lập, nhưng điều đó đủ để giúp bạn biết liệu bạn có thích cái này hơn cái kia hay không, và liệu MonoTouch có, với bạn, trị giá 399 đô la hay không.

Và đừng nghe những người quá khích - họ có xu hướng là những người chưa sử dụng công nghệ mà họ đang chống lại :)


50
Wow, Rory, cảm ơn vì đã dành thời gian trả lời câu hỏi của tôi một cách chi tiết như vậy. Từ những gì tôi có thể nói bạn là người duy nhất đã sử dụng cả hai tùy chọn, đó là người mà tôi đang tìm kiếm câu trả lời. Tôi chắc chắn sẽ cho cả hai thử một lần đi từ đó. BTW, tôi đã nghe bạn trên podcast SO gần đây nhất, phải không? Đồ tốt. Cảm ơn một lần nữa!
jamesaharvey

17
Cảm ơn các ý kiến ​​:) Tôi đã cảm thấy thất vọng với một số sự ghét bỏ đầu gối mà tôi đã thấy. Hết lần này đến lần khác câu hỏi được trả lời với "Ur a idiot lurn để nghi thức hệ thống làm mờ đầu tiên !! ??" Đó là vô ích và xúc phạm. MonoTouch có những điểm thô, nhưng những kẻ đó có thành tích thiên tài. MT đã tiến bộ nhanh chóng và đẹp hơn mỗi ngày. Tôi cứ nói: cho họ vài tháng. Họ thận trọng về các tính năng, nhưng tôi nghĩ chúng ta sẽ thấy những thứ lớn . Tôi yêu ngăn xếp của Apple, nhưng bây giờ tôi có một sân chơi khác - đó là một điều tốt và tôi rất ham chơi :)
Rory Blyth

4
@Stephan - Có thể không đúng khi nói những gì "mất tích" - Tôi có thể hoàn thành công việc với Ca cao. Đó là nhiều hơn về các API. Nó dễ dàng hơn nhiều để làm việc với các chuỗi, ngày, XML, v.v., với .Net. Nếu bạn không quen với cách làm Net này, cũng như mức độ hỗ trợ của MonoTouch dành cho họ - nếu bạn chưa xem xét về nó, bạn nên - chỉ cần kiểm tra. Tôi không có ý nói rằng có những điều bạn không thể làm với Ca cao, nhưng có nhiều điều dễ dàng thực hiện hơn với .Net. Phân tích cú pháp dễ dàng hơn trên bảng - toán ngày dễ dàng hơn trên bảng - v.v.
Rory Blyth

3
Ngoài ra, có vấn đề tái sử dụng mã của riêng bạn trong iPhone / iPad với MT. Chúng tôi có một số mã mật mã và mã logic kinh doanh, chạy trên các đối tác máy chủ và máy tính để bàn của chúng tôi, chúng tôi có thể biên dịch lại với MT và sử dụng trong ứng dụng khách iOS của chúng tôi. Điều đó có thể quan trọng đối với một số dự án.
Monoman

2
Cũng đáng xem xét là thực tế, mặc dù giấy phép có giá 400 đô la, nhưng cũng có một thuê bao bảo trì mà bạn phải gia hạn (vì lý do rõ ràng) mỗi năm - 250 đô la. Đây có thể là một mức giá hợp lý, nhưng vẫn đáng để xem xét.
Amc_rtty

62

Có rất nhiều tin đồn trong bài đăng này từ các nhà phát triển chưa thử MonoTouch Objective-C. Nó dường như chủ yếu là các nhà phát triển Objective-C chưa bao giờ thử MonoTouch.

Tôi rõ ràng là thiên vị, nhưng bạn có thể kiểm tra xem cộng đồng MonoTouch đã làm gì:

http://xamarin.com

Ở đó bạn sẽ tìm thấy một số bài viết từ các nhà phát triển đã phát triển trong cả Objective-C và C #.


29
@NSResponder - Bạn đã sử dụng MonoTouch chưa? Đây là phiên bản v1.x, thực tế hoàn toàn mới và đã rất tuyệt vời. Hãy thử nó trước khi bình luận về nó. Có nhiều thay đổi lớn (tích hợp Trình tạo giao diện của nó tốt hơn nhiều so với Xcode) và có rất ít thay đổi (ví dụ, so sánh cách ObjC / Ca cao để lấy thư mục tài liệu của người dùng so với MT). Tôi vẫn sử dụng stack của Apple cho một số thứ, nhưng MT rất đẹp và đầy tiềm năng. Nghiêm túc - chỉ cần thử nó. Hoặc xem cách API API đã bị ràng buộc - bạn không phải sử dụng nó - chỉ cần không làm hỏng công việc mà không tìm hiểu về nó.
Rory Blyth

Đúng! Ngoài ra, một số tính năng mới của C # 5.0 giúp mã hóa trở nên thú vị hơn so với object-c.
harsimranb

39

Vì vậy, câu trả lời của tôi cho một câu hỏi tương tự trước đó là tìm hiểu Objective-C. (Ngoài ra, đừng quên hỗ trợ gỡ lỗi)

Điều này có thể sẽ xúc phạm một số nhưng thành thật mà nói, nếu bạn sẽ thực hiện bất kỳ sự phát triển nghiêm túc nào, bạn nên học Objective-C. Không biết Objective-C trong phát triển iPhone sẽ chỉ là một trở ngại. Bạn sẽ không thể hiểu nhiều ví dụ; bạn phải đối phó với những điều kỳ quặc của Mono trong khi nếu bạn có kiến ​​thức làm việc về Objective-C, bạn có thể nhận được nhiều hơn từ tài liệu nền tảng.

Cá nhân, tôi không hiểu vị trí nói tăng lượng thông tin bạn cần có lợi cho việc sử dụng Mono trên ngôn ngữ bản địa của nền tảng. Nó có vẻ hơi phản tác dụng với tôi. Tôi nghĩ rằng nếu đây là một đề xuất rất tốn kém (học một ngôn ngữ mới) thì có thể đáng để dành thời gian cho các khái niệm lập trình cơ bản để học ngôn ngữ mới là một đề xuất khá rẻ.

Một người dùng khác cũng đã viết điều này:


Monotouch là dễ dàng hơn cho bạn bây giờ. Nhưng khó hơn về sau.

Ví dụ, điều gì xảy ra khi hạt giống mới xuất hiện bạn cần kiểm tra nhưng phá vỡ MonoTouch vì một số lý do?

Bằng cách gắn bó với Mono, bất cứ khi nào bạn tìm kiếm tài nguyên cho các khung công tác, bạn phải dịch một cách tinh thần vào cách bạn sẽ sử dụng chúng với Mono. Các tệp nhị phân ứng dụng của bạn sẽ lớn hơn, thời gian phát triển của bạn không nhanh hơn sau vài tháng vào Objective-C và các nhà phát triển ứng dụng khác sẽ có lợi thế hơn nhiều so với bạn vì họ đang sử dụng nền tảng gốc.

Một cân nhắc khác là bạn đang muốn sử dụng C # vì bạn quen thuộc với ngôn ngữ hơn Objective-C. Nhưng phần lớn đường cong học tập cho iPhone không phải là Objective-C, đó là các khung - mà bạn cũng sẽ phải gọi bằng C #.

Đối với bất kỳ nền tảng nào, bạn nên sử dụng nền tảng thể hiện trực tiếp triết lý thiết kế của nền tảng đó - trên iPhone, đó là Objective-C. Hãy suy nghĩ về điều này từ góc độ ngược lại, nếu một nhà phát triển Linux đã từng lập trình trong GTK muốn viết các ứng dụng Windows, bạn có nghiêm túc khuyên họ không nên sử dụng C # và gắn bó với GTK không vì họ sẽ dễ dàng làm điều đó hơn?



12
Bạn, có lẽ vô tình, đã trình bày sai MT. Hoàn toàn không - không phải từ xa - sử dụng GTK để viết ứng dụng Win. Các ràng buộc của MT rất trung thành với Cốc Cốc. Họ đã thực sự cải thiện một số quy ước API CT. Nhưng bạn không viết ứng dụng của mình bằng cách sử dụng bản tóm tắt dựa trên Windows Forms trên CT. MT với MonoDevelop có tích hợp tốt hơn với IB so với Xcode (nếu bạn muốn) và bạn thường có thể nhận được những điều tương tự được thực hiện trong một nửa mã hoặc ít hơn. Kích thước nhị phân đang được cải thiện và các công cụ (trình tạo ràng buộc, v.v.) luôn tốt hơn. Ứng dụng MT một ứng dụng gốc.
Rory Blyth

7
Để đưa ra các ví dụ thay vì mong đợi bạn tự mình lấy ý kiến ​​của người hâm mộ MT (rõ ràng), tôi có thể làm những việc như (và đây chỉ là một tập hợp lợi thế tuổi teen): Tạo một tài sản với một dòng; lấy một tham chiếu đến thư mục Tài liệu mà không có trò chơi mảng vô lý (một ứng dụng có một thư mục tài liệu, luôn ở cùng một vị trí - tại sao tất cả các công việc phụ phải "tìm" nó?); sử dụng khung .Net nơi Cacao hôi thối (NSDate, có ai không?); sử dụng các kỹ năng hàng hóa cho các ứng dụng doanh nghiệp; sử dụng các bit XML hiện đại, phù hợp (Tôi thích nó khi Cacao âm thầm bóp nghẹt các ký tự và chỉ dừng lại - không gặp sự cố - chỉ dừng lại ).
Rory Blyth

8
Không nói rằng tôi sẽ sử dụng nó cho tất cả mọi thứ. Tôi thích ObjC và vẫn sử dụng nó. Và, nếu hiệu suất là một vấn đề, tôi có quyền kiểm soát chi tiết hơn đối với những gì đang diễn ra. Nhưng ... có những lúc MT sẽ có ý nghĩa hơn và tôi nghĩ rằng nó sẽ biến iPhone thành một lựa chọn khả thi để phát triển doanh nghiệp. Ném một hòn đá lên không trung và bạn sẽ trúng .Net dev. Hầu hết các công ty không có nhà phát triển ObjC nội bộ. Và đối với công việc doanh nghiệp, họ không cần phải làm vậy. MT dễ dàng hơn nhiều để làm việc với các dịch vụ web và DB. Bạn thực sự có thể viết nhiều loại ứng dụng bằng MT với một nửa mã mà nó sẽ nhận trong ObjC.
Rory Blyth

8
Cuối cùng (tôi có thể tiếp tục, nhưng tôi nghĩ rằng tôi đang tạo ra điểm mt), những thay đổi "phá vỡ" MonoTouch có lẽ cũng có khả năng phá vỡ các ứng dụng ObjC. Khi ứng dụng của bạn có trong cửa hàng, đó là ứng dụng dành cho iPhone gốc (vì nó phải như vậy). Các cuộc gọi cuối cùng không khác nhau - cùng thời gian chạy như các ứng dụng được xây dựng với ngăn xếp của Apple. Nếu ứng dụng MT của bạn bị hỏng do thay đổi môi trường thời gian chạy, thì các ứng dụng được xây dựng với ObjC cũng vậy. Và nhóm MT đã đứng đầu các công cụ này, phát hành các bản cập nhật và sửa lỗi nhanh chóng. Các ràng buộc của MT ánh xạ đủ chặt chẽ với CT rằng khả năng xảy ra sự cố thực sự là thấp. Aight - Tôi sẽ im lặng ngay bây giờ :)
Rory Blyth

27

Sử dụng Mono không phải là một cái nạng. Có rất nhiều thứ mà nó bổ sung cho HĐH iPhone. LINQ, WCF, mã có thể chia sẻ giữa ứng dụng Silverlight, trang ASP.NET, ứng dụng WPF, ứng dụng Windows Form và cũng có đơn âm cho Android và nó cũng sẽ hoạt động cho Windows Mobile.

Vì vậy, bạn có thể dành nhiều thời gian để viết Objective-C (Bạn sẽ thấy từ nhiều nghiên cứu trong đó mã mẫu chính xác trong C # ít hơn đáng kể để viết so với OC) và sau đó GIẢI QUYẾT tất cả cho các nền tảng khác. Đối với tôi, tôi đã chọn MonoTouch vì Ứng dụng đám mây tôi đang viết sẽ có nhiều giao diện, iPhone chỉ là một trong số đó. Truyền dữ liệu WCF từ đám mây sang ứng dụng MonoTouch cực kỳ đơn giản. Tôi có các thư viện cốt lõi được chia sẻ giữa các nền tảng khác nhau và sau đó chỉ cần viết một lớp trình bày đơn giản cho các triển khai iPhone / WinMobile / Android / SilverLight / WPF / ASP.NET. Tái tạo tất cả trong Objective-C sẽ là một sự lãng phí rất lớn thời gian cho cả nhà phát triển và bảo trì ban đầu khi sản phẩm tiếp tục tiến lên vì tất cả các chức năng sẽ phải được sao chép thay vì sử dụng lại.

Những người đang xúc phạm MonoTouch hoặc nói bóng gió rằng người dùng cần một cái nạng đang thiếu Bức tranh lớn về ý nghĩa của việc có khung .NET trong tầm tay của bạn và có thể không hiểu sự phân tách logic hợp lý khỏi cách trình bày được thực hiện theo cách mà có thể được tái sử dụng trên các nền tảng và thiết bị.

Mục tiêu-C là thú vị và rất khác với nhiều ngôn ngữ phổ biến. Tôi thích một thử thách và học các cách tiếp cận khác nhau ... nhưng không phải khi làm như vậy cản trở tiến trình của tôi hoặc tạo ra mã hóa lại không cần thiết. Có một số điều thực sự tuyệt vời về khung SDK iPhone, nhưng tất cả sự tuyệt vời đó đều được hỗ trợ đầy đủ với MonoTouch và cắt bỏ tất cả quản lý bộ nhớ thủ công, giảm số lượng mã cần thiết để thực hiện các tác vụ tương tự, cho phép tôi sử dụng lại các hội đồng của mình và giữ cho các tùy chọn của tôi mở để có thể di chuyển đến các thiết bị và nền tảng khác.


19

Tôi đã chuyển. Monotouch hãy để tôi viết ứng dụng nhanh nhất ít nhất 3-4 lần (4 ứng dụng mỗi tháng so với 1 cũ của tôi mỗi tháng trong Obj C)

Rất ít gõ.

Chỉ là kinh nghiệm của tôi.


2
"4 ứng dụng mỗi tháng" - Khi số lượng quan trọng hơn như chất lượng. MT giống như McDonalds. Nhưng bạn có được thức ăn tốt hơn tại XCode-Restaurant.
Netshark1000

2
Mặc dù kết quả nói khác nhau, nhưng Rdio và iCircuit là các ứng dụng MT được Steve Jobs giới thiệu. C # và MT thoát khỏi công việc hệ thống ống nước mà obj-C buộc bạn phải làm.
Ian Vink

17

Nếu đây là ứng dụng iPhone duy nhất bạn từng phát triển và bạn cũng không có hứng thú phát triển ứng dụng Mac, thì MonoTouch có lẽ đáng giá.

Nếu bạn nghĩ rằng bạn sẽ phát triển thêm nhiều ứng dụng cho iPhone hoặc sẽ muốn thực hiện một số phát triển riêng của Mac, thì có lẽ đáng để học Objective-C và các khung công tác liên quan. Thêm vào đó, nếu bạn là kiểu lập trình viên thích học hỏi những điều mới, thì đó là một mô hình mới thú vị để nghiên cứu.


6
Nếu đây là ứng dụng iPhone duy nhất bạn từng phát triển, 99 đô la / năm cũng không xứng đáng.
Dinah

Bạn có thể sử dụng cùng các công cụ phát triển C # để xây dựng các ứng dụng Mac. Trong thực tế, bạn có thể mã chia sẻ giữa các ứng dụng iPhone C # và Mac C #. MonoTouch hiện được gọi là Xamarin
Ian Vink

9

Cá nhân tôi nghĩ rằng bạn sẽ có thời gian tốt hơn khi học Objective-C.

Nói ngắn gọn:

  • "Mục tiêu học tập-C" không gây khó khăn như bạn nghĩ, thậm chí bạn có thể tận hưởng nó chỉ sau vài tuần đầu tiên
  • Bạn đã quen thuộc với cú pháp "kiểu C" với rất nhiều * & () {}; mọi nơi
  • Apple đã làm rất tốt việc ghi chép lại mọi thứ
  • Bạn sẽ tương tác với iPhone theo cách Apple dự định, điều đó có nghĩa là bạn sẽ nhận được lợi ích trực tiếp từ nguồn không thông qua một số bộ lọc.

Tôi đã phát hiện ra rằng các dự án như Unity và MonoTouch có nhiệm vụ "tiết kiệm thời gian cho bạn" nhưng cuối cùng bạn sẽ cần học ngôn ngữ cụ thể theo tên miền của họ và đôi khi sẽ phải thực hiện các bước bên lề. Tất cả những điều đó có thể sẽ đưa bạn đến chừng nào nó còn học được ngôn ngữ mà bạn đang cố gắng tránh học (theo thời gian lịch). Cuối cùng, bạn đã không tiết kiệm được thời gian và bạn đã kết hợp chặt chẽ với một số sản phẩm.

EDIT: Tôi không bao giờ có ý ám chỉ bất cứ điều gì tiêu cực về .NET Tôi tình cờ là một fan hâm mộ lớn của nó. Quan điểm của tôi là việc thêm nhiều lớp phức tạp chỉ vì bạn chưa cảm thấy thoải mái với ký hiệu khung objc kỳ quặc không thực sự có ý nghĩa với tôi.

Cập nhật 2019: 7 năm sau. Tôi vẫn cảm thấy như vậy nếu không muốn nói là như vậy. Chắc chắn, 'ngôn ngữ cụ thể của tên miền' có thể là thuật ngữ sử dụng sai, nhưng tôi vẫn tin rằng viết trực tiếp cho nền tảng bạn đang làm việc và tránh các lớp tương thích và trừu tượng càng nhiều càng tốt. Nếu bạn lo lắng về việc tái sử dụng mã và làm việc lại, nói chung, bất kỳ chức năng nào mà ứng dụng đa nền tảng của bạn cần thực hiện có thể được thực hiện bằng các công nghệ web hiện đại.


12
Trước hết, C # không phải là một "ngôn ngữ cụ thể miền" - cách xa nó. Đó là một kỹ năng hàng hóa. Đó là một phần giá trị của MonoTouch. Có thể lập luận (không công bằng và không chính xác) rằng ObjC là một DSL trong đó hầu hết các nhà phát triển (bên ngoài phòng thí nghiệm và tầng hầm tài chính và đại học) sẽ chỉ sử dụng nó để phát triển OS X hoặc iPhone. Nhưng nó không phải là. Giống như C #, đó là một ngôn ngữ linh hoạt về cơ bản tồn tại để cho phép bạn tập trung vào các khung hơn là chính ngôn ngữ đó (tôi nghĩ chúng tôi đồng ý ở đó). Nhưng hãy nhớ rằng mã ObjC của bạn sẽ bị hỏng với các bản cập nhật của Apple. Đó không phải là vấn đề cụ thể của MT.
Rory Blyth

3
MT thậm chí có thể cứu bạn trong một số trường hợp có lớp trừu tượng này. Apple sửa đổi API? Chà, ứng dụng ObjC của bạn ứng dụng MT tương đương (hãy giả vờ nó tồn tại) sẽ bị hỏng. Các anh chàng MT có thể phát hành một giải pháp ngăn chặn để sửa đổi cách API MonoTouch xử lý cuộc gọi phía sau hậu trường. Mã MT của bạn sẽ không phải thay đổi - bạn chỉ có thể xây dựng lại dựa trên bản phát hành MT dừng lại. Có: đây là một bản sửa lỗi bẩn có thể dễ dàng dẫn đến các sự cố, nhưng việc loại bỏ đúng cách API API dừng sẽ giúp các nhà phát triển có thời gian để xử lý thay đổi một cách liền mạch mua thời gian để sửa lỗi thực sự .
Rory Blyth

4
Thêm vào đó, mới như MT, việc tạo các ràng buộc của riêng bạn sẽ dễ dàng hơn rất nhiều nếu cần thiết (MT 1.2). Bạn không hoàn toàn phụ thuộc vào MT peeps để làm tất cả công việc đó (mặc dù họ đang làm công việc đó), và chưa bao giờ. Họ có những cách đơn giản để tạo ra các ràng buộc. Chúng phơi bày đủ thời gian chạy ObjC với các khung MT mà bạn không bị khóa trong cách làm việc của chúng. Tôi đã thực hiện lại các ràng buộc chỉ để xem liệu tôi có thích cách của tôi hơn không. Bạn có thể bỏ qua các khung MT và gửi và nhận tin nhắn "thủ công" nếu bạn muốn và phải mất ít mã. Họ là những người thông minh. Tin tưởng họ :)
Rory Blyth

2
Tôi nghĩ rằng slf không nhận thức được thực tế rằng Monotouch chỉ là C # (với GC) liên kết trực tiếp với các thư viện ObjC + thư viện .NET tùy chọn. Vì vậy, bạn vẫn sử dụng API được cung cấp bởi apple. Nhưng với một cú pháp gọn gàng hơn và bộ sưu tập rác.
basarat

4

Để thêm vào những gì người khác đã nói (tốt!): Cảm giác của tôi là về cơ bản bạn đang nhân đôi số lỗi bạn phải lo lắng, thêm các lỗi trong MonoTouch vào các lỗi đã có trong HĐH iPhone. Cập nhật cho các phiên bản HĐH mới sẽ còn đau đớn hơn bình thường. Yuck, tất cả xung quanh.

Trường hợp hấp dẫn duy nhất tôi có thể thấy cho MonoTouch là các tổ chức có rất nhiều lập trình viên C # và mã C # nằm xung quanh mà họ phải tận dụng trên iPhone. (Loại cửa hàng thậm chí sẽ không nhấp nháy ở mức $ 3500.)

Nhưng đối với bất cứ ai bắt đầu từ đầu, tôi thực sự không thể xem nó là đáng giá hay khôn ngoan.


-1: Ý của bạn là "nhiều lỗi hơn" là gì? Có sự không khớp trở kháng chói giữa Mono và Objective-C không?
Jim G.

4

Ba từ: Linq to SQL

Vâng, nó cũng có giá trị $.


4
Với các ràng buộc giá trị khóa và dữ liệu cốt lõi của Objective-C, bạn sẽ có được thứ gì đó rất giống với Linq-to-SQL. Không giống nhau. Có thể không hoàn toàn mạnh mẽ - nhưng bao gồm rất nhiều mặt bằng. Lưu ý rằng Core-Data hiện không được
MonoTouch

Linq to SQL có liên quan đến ứng dụng iPhone không? Nó hoạt động với SQLite?
bpapa

1
Và bạn muốn người dùng của bạn chia sẻ dữ liệu qua mạng. Bạn đang làm gì với SQL lite?
Bryan

"MonoTouch dựa trên cấu hình API .NET 2.0 và Silverlight 2 lai" LINQ có được hỗ trợ cho các đối tượng không?
Chris S

2

Một cái gì đó tôi muốn thêm vào, mặc dù có một câu trả lời được chấp nhận - ai sẽ nói rằng Apple sẽ không từ chối các ứng dụng có dấu hiệu được xây dựng với Mono Touch?


Họ chắc chắn nên và họ cũng nên từ chối các ứng dụng Flash, nhưng các điều khoản trên App Store của họ không ngăn cản việc sử dụng chúng.
NSResponder

3
@bpapa - đó là một mối quan tâm hoàn toàn hợp lệ, nhưng: 1) Không có lý do gì để từ chối các ứng dụng (người dùng không quan tâm ứng dụng của họ được viết với cái gì - họ quan tâm đến chính các ứng dụng) và 2) MonoTouch có rất nhiều tiềm năng để phát triển doanh nghiệp và miễn là bạn có tài khoản dành cho doanh nghiệp , Apple không thể ngăn bạn phân phối ứng dụng của mình. Ngoài ra, Apple chấp nhận các trò chơi được xây dựng bằng Unity. Cuối cùng, MT tuân theo các quy tắc. Quá trình của Apple đôi khi có vẻ ngẫu nhiên, nhưng ... MT tuân theo các quy tắc: |
Rory Blyth

1
@bpapa - Không biết tôi đã bỏ lỡ nhận xét này lâu như thế nào, nhưng: 1) Hàng tấn ứng dụng ObjC bị "vùi dập" khi sử dụng API không có giấy tờ ("riêng tư") - FB, như bạn đã lưu ý, là một trong số chúng, chưa FB vẫn còn sống và có sẵn để tải xuống, 2) Vấn đề của Unity đã được giải quyết nhanh chóng và Unity đã quay trở lại đó. - Theo như Apple muốn bạn sử dụng công cụ của riêng họ, tôi sẽ không đồng ý, nhưng muốn và yêu cầu rất khác nhau. Đối với các ứng dụng doanh nghiệp: bạn có thể triển khai các ứng dụng doanh nghiệp MT. Chúng chỉ là nhị phân bản địa. Tôi không thấy vấn đề, tôi cũng không hiểu tại sao bạn lại chống MT như vậy.
Rory Blyth

1
Tôi nên nói thêm rằng không phải tôi "ghét" cú pháp của ObjC, mà tôi rất thích C #. Tôi cũng thích cách của .NET. Cách thức của Cacao. Thao tác chuỗi, xử lý XML, mọi thứ liên quan đến ngày tháng, v.v. - Tôi sẽ sử dụng các ràng buộc MT CocoaTouch cho công việc UI, nhưng đối với hầu hết các tác vụ khác, tập hợp con của khung .Net vận chuyển với MT giúp cuộc sống dễ dàng hơn nhiều. Tôi có thể tiếp tục và tiếp tục (chẳng hạn như sở thích của tôi để tìm một số lỗi nhất định tại thời gian biên dịch ). Tôi chỉ trích ngăn xếp của Apple, nhưng tôi không thích nó. Có thể thích MT ObjC / vv.
Rory Blyth

1
Apple đã thay đổi suy nghĩ và giờ đây, họ chấp nhận các ứng dụng ở bất kỳ ngôn ngữ / khung nào và đưa ra một danh sách các tiêu chí 'khách quan' hơn để chấp nhận các ứng dụng trên cửa hàng.
Monoman

2

Tôi sẽ đầu tư thời gian vào Objective-C chủ yếu vì tất cả sự giúp đỡ bạn có thể nhận được từ các trang web như thế này. Một trong những điểm mạnh của Objective-C là bạn có thể sử dụng mã C và C ++, và có rất nhiều dự án ngoài đó đã được thử nghiệm tốt .

Một điều nữa là mã của bạn (ngôn ngữ của sự lựa chọn) sẽ được hỗ trợ bởi apple. Ví dụ, iOS 5.x loại bỏ sự hỗ trợ cho giải pháp của bên thứ ba như MonoTouch? Bạn sẽ nói gì với khách hàng của bạn sau đó?

Có lẽ tốt hơn là sử dụng giải pháp độc lập nền tảng như HTML5 nếu bạn chưa sẵn sàng để chuyển sang Objective-C?


Tôi thấy lập luận rằng bằng cách sử dụng MonoTouch, bạn bị khóa vào một nhà cung cấp mà Apple có thể ngừng cung cấp để cho phép / hỗ trợ rất mạnh. Cuối cùng, bạn có thể đầu tư vào một nền tảng nằm trong tầm ngắm của Apple, nơi có nền tảng phát triển của riêng họ ...
jl.

2

Tôi đã sử dụng MonoTouch được vài tháng rồi, tôi đã chuyển một nửa ứng dụng đã hoàn thành của mình từ ObjectiveC để tôi có thể hỗ trợ Android vào một lúc nào đó trong tương lai.

Đây là kinh nghiệm của tôi:

Các bit xấu:

  • Xamarin Studio. Các nhà phát triển Indie như tôi buộc phải sử dụng Xamarin Studio. Nó đang trở nên tốt hơn mỗi tuần, các nhà phát triển rất tích cực trên các diễn đàn xác định và sửa lỗi, nhưng nó vẫn rất chậm, thường xuyên bị treo, có rất nhiều lỗi và việc gỡ lỗi cũng khá chậm.

  • Xây dựng thời gian. Việc xây dựng ứng dụng lớn (được liên kết) của tôi để gỡ lỗi trên thiết bị có thể mất vài phút, điều này được so sánh với XCode, triển khai gần như ngay lập tức. Xây dựng cho trình giả lập (không liên kết) nhanh hơn một chút.

  • Các vấn đề về MonoTouch. Tôi đã gặp phải sự cố rò rỉ bộ nhớ do xử lý sự kiện và phải đưa vào một số cách khắc phục khá xấu xí để ngăn chặn rò rỉ, chẳng hạn như đính kèm và tách các sự kiện khi vào và rời khỏi chế độ xem. Các nhà phát triển Xamarin đang tích cực xem xét các vấn đề như thế này.

  • Thư viện bên thứ 3. Tôi đã dành khá nhiều thời gian để chuyển đổi / ràng buộc các thư viện ObjectiveC để sử dụng trong ứng dụng của mình, mặc dù điều này đang trở nên tốt hơn với phần mềm tự động như Objective Sharpie.

  • Các nhị phân lớn hơn. Điều này không thực sự làm phiền tôi nhưng tôi nghĩ tôi sẽ đề cập đến nó. IMO một vài Mb thêm là không có gì những ngày này.

Bit tốt:

  • Đa nền tảng. Bạn tôi đang vui vẻ tạo một phiên bản Android cho ứng dụng của tôi từ cơ sở mã lõi của mình, chúng tôi đang phát triển song song và đang cam kết với kho lưu trữ Git từ xa trên Dropbox, điều đó rất tốt.

  • .Mạng lưới. Làm việc trong C # .Net đẹp hơn nhiều so với Mục tiêu C IMO.

  • MonoTouch. Khá nhiều thứ trong iOS được nhân đôi trong .Net và khá đơn giản để mọi thứ hoạt động.

  • Xamarin. Bạn có thể thấy rằng những kẻ này đang thực sự làm việc để cải thiện mọi thứ, làm cho sự phát triển mượt mà và dễ dàng hơn.

Tôi chắc chắn khuyên dùng Xamarin để phát triển đa nền tảng, đặc biệt nếu bạn có tiền để sử dụng các phiên bản Doanh nghiệp hoặc Doanh nghiệp hoạt động với Visual Studio.

Nếu bạn chỉ đang tạo một ứng dụng iPhone sẽ không bao giờ cần trên nền tảng khác và bạn là nhà phát triển Indie, tôi sẽ gắn bó với XCode và Objective C ngay bây giờ.


Một bản cập nhật nhanh về câu trả lời của tôi ở trên. Kể từ khi chuyển sang máy Mac nhanh hơn, tôi thấy thời gian xây dựng nhanh hơn rất nhiều, nó vẫn không tức thì như XCode nhưng nó vẫn ổn.
danfordham

1

Là một người có kinh nghiệm với cả C # cũng như Objective-C, tôi muốn nói với hầu hết mọi người, Xamarin sẽ rất đáng đồng tiền bát gạo.

C # là một ngôn ngữ được thiết kế thực sự tốt và API của C # cũng được thiết kế tốt. Tất nhiên, API của Touch Touch (bao gồm cả UIKit) cũng có thiết kế tuyệt vời, tuy nhiên ngôn ngữ có thể được cải thiện theo nhiều cách. Khi viết bằng C #, bạn có thể sẽ có năng suất cao hơn so với viết cùng mã trong Objective-C. Điều này là do một số lý do, nhưng một số lý do sẽ là:

  • C # có kiểu suy luận . Kiểu suy luận giúp viết mã nhanh hơn, vì bạn không phải "biết" loại ở phía bên trái của bài tập. Nó cũng làm cho tái cấu trúc dễ dàng hơn và tiết kiệm hơn.

  • C # có tính tổng quát , sẽ giảm lỗi so với mã Objective-C tương đương (mặc dù có một số cách giải quyết trong Objective-C, trong hầu hết các tình huống, các nhà phát triển sẽ tránh chúng).

  • Gần đây Xamarin đã thêm hỗ trợ cho Async / Await , điều này giúp việc viết mã không đồng bộ rất dễ dàng.

  • Bạn sẽ có thể sử dụng lại một phần cơ sở mã trên iOS, Android và Windows Phone.

  • MonoTouch phần lớn thực hiện API của Cốc Cốc theo cách rất đơn giản. Vd: NSData, v.v ...).

  • Xamarin sẽ cung cấp cho người dùng trải nghiệm bản địa, không giống như các giải pháp như PhoneGap hoặc Titanium.

Bây giờ Objective-C có một số lợi thế so với C #, nhưng trong hầu hết các tình huống, việc viết ứng dụng bằng C # thường sẽ dẫn đến thời gian phát triển ít hơn và mã sạch hơn và ít làm việc hơn để chuyển cùng ứng dụng sang các nền tảng khác. Một ngoại lệ đáng chú ý có thể là các trò chơi hiệu năng cao dựa trên OpenGL.


-35

Chi phí của thư viện MonoTouch hoàn toàn bên cạnh điểm. Lý do bạn không nên sử dụng Mono cho các ứng dụng iPhone của mình, đó là vì nó là một cái nạng. Nếu bạn không thể bận tâm tìm hiểu các công cụ bản địa, thì tôi không có lý do gì để tin rằng sản phẩm của bạn đáng để tải xuống.

Chỉnh sửa: 4/14/2010 Các ứng dụng được viết bằng MonoTouch không đủ điều kiện cho iTunes Store. Điều này là vì nó nên được. Apple đã thấy rất nhiều cổng nông trên Mac, sử dụng các bộ công cụ đa nền tảng như Qt hoặc triển khai lại một phần hộp công cụ System 7 của riêng Adobe, và dài và ngắn thì chúng không đủ tốt.


14
Thị phần cho Mac OS X là rất nhỏ và vì vậy iPhone là lý do thuyết phục duy nhất để thậm chí xem xét việc làm phiền với X-Code và ObjC. Cả hai đều tuyệt vời hơn 15 năm trước khi nó là Project Builder và đã làm phức tạp và đóng gói đa nền tảng nhưng thật lòng mà nói - như một người sử dụng một loạt các nền tảng - với các công cụ và ngôn ngữ tốt hơn hiện nay, hầu như không ngạc nhiên khi các nhà phát triển muốn tận dụng một điểm chung codebase và sử dụng các công cụ phát triển thay thế. Nó không ngụ ý sáng tạo của họ sẽ dưới mệnh.
Iain Collins

37
Tôi không biết, anh bạn ... Tôi nghĩ Objective-C và CocoaTouch là một cái nạng. Nếu bạn không viết lắp ráp, tôi sẽ cảm thấy như bạn không quan tâm đến điều đó và tôi sẽ không tải xuống ứng dụng của bạn (tất nhiên, điều đầu tiên người dùng làm là kiểm tra xem công cụ nào là được sử dụng để xây dựng ứng dụng mô phỏng đầy hơi mà họ đang tải xuống).
Rory Blyth

3
Andrew, bạn biết không phải của bạn nói. Mục tiêu-C là không có nước chảy ngược; đó là xương sống của môi trường phát triển bản địa cho Mac, iPhone và iPad.
NSResponder

5
Vì vậy, bạn chọn ra một ví dụ đơn giản về một thứ gì đó mà Apple đã tích hợp vào khung công tác và yêu cầu sự vượt trội, trong khi thuận tiện bỏ qua các phần của khung công tác xa hơn so với tương đương C #? Đó không phải là một cái gì đó của một cuộc tranh cãi rơm?
Andrew Rollings

8
Tôi đã chuyển sang MonoTouch và cũng đã xuất bản 47 ứng dụng trên 4.0. Tôi làm nó toàn thời gian. Hoạt động tuyệt vời, nhanh chóng. Tôi đã từng viết trong Objective C nhưng tìm C # với Linq nhanh hơn với rất ít mã để viết.
Ian Vink
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.