2012-09-20 54 views
15

Câu hỏi này xuất hiện khá thường xuyên ở đây, ngay cả khi chỉ ngầm khi người dùng nhầm lẫn các câu hỏi iOS của họ. Vậy, sự khác nhau giữa Xcode, Objective-C và Cocoa là gì?Sự khác nhau giữa Xcode, Objective-C và Cocoa là gì?

+31

Đó là sự khác biệt giữa một cây bút, tiếng Anh, và một thư viện công cộng. –

+2

@Catfish_Man Nó thực sự rất hữu ích, không ... đặc biệt cho bất cứ ai bắt đầu đi sâu vào phát triển iOS – Leo

Trả lời

32

Objective-C là ngôn ngữ lập trình. Có thể nói rằng đó chỉ là mô tả về những chương trình mục tiêu-C hợp lệ trông như thế nào và ý nghĩa của chúng. Nếu bạn có một danh sách mã nguồn được viết trong Objective-C, bạn cần một trình thông dịch hoặc trình biên dịch để đặt danh sách hoạt động. Các ngôn ngữ như Objective-C thường được biên dịch, vì vậy hầu hết mọi người sử dụng một trình biên dịch (như LLVM). Objective-C hầu như chỉ được sử dụng để phát triển cho iOS và OS X, nhưng cũng có những cách sử dụng khác - như một ví dụ, một số người viết Objective-C cho Linux.

Bạn có thể sử dụng trình soạn thảo văn bản để viết các nguồn và trình biên dịch để biến chúng thành một chương trình thực tế, nhưng với các công nghệ hiện đại cần nhiều hơn để chăm sóc, để có một chương trình khác giúp công việc của bạn dễ dàng hơn. Chúng được gọi là Môi trường phát triển tích hợp hoặc IDE. Một IDE cung cấp cho bạn một cách thuận tiện để chỉnh sửa các nguồn, biên dịch chúng, gỡ lỗi các chương trình kết quả, đọc tài liệu và nhiều thứ khác. Xcode là một IDE như vậy. Một quan sát quan trọng ở đây là Xcode không biên dịch các nguồn của bạn, nó chỉ gọi trình biên dịch độc lập (LLVM). Và Xcode không phải là IDE duy nhất bạn có thể sử dụng để phát triển các ứng dụng Objective-C - ví dụ: AppCode.

Viết ứng dụng iOS hoặc OS X từ đầu mỗi lần sẽ rất tốn thời gian. Đó là lý do tại sao Apple cung cấp cho nhà phát triển một bộ thư viện tốt. Các thư viện chỉ đơn giản là một số lượng lớn mã nguồn được viết bởi Apple và mã nguồn này sẽ xử lý hầu hết những thứ mà ứng dụng có chung. Những thư viện này được gọi là Cocoa.

Bây giờ, nếu bạn không thể tìm ra cách mở rộng một lớp, có thể bạn đang nói về Objective-C. Nó không liên quan gì đến Xcode hay Cocoa, bạn có thể viết một số mã GNUstep cho Linux bằng cách sử dụng Vim như một IDE và GCC như một trình biên dịch. Mặt khác, nếu quá trình tạo Xcode của bạn không thành công do một số cài đặt bí ẩn hoặc nếu bạn đang cố gắng xây dựng một thư viện tĩnh trong Xcode, đó rõ ràng là vấn đề Xcode. Và nếu bạn không thể tìm ra cách sử dụng một số cơ sở NSObject hoặc lớp NSFileManager, đó là Cocoa. (Nhưng nó không phải là Xcode liên quan, như bạn có thể sử dụng AppCode hoặc TextMate như IDE của bạn!)


Originally available on my blog. Vui lòng liên kết tới bài đăng trên blog hoặc câu hỏi này khi gắn thẻ lại hoặc giải thích sự khác biệt.

+0

bài đăng hay, nhưng tôi phải hỏi, dựa trên tuyên bố này ... "Những thư viện này được gọi là Cocoa" ... a câu hỏi đặt ra, sự khác biệt giữa khuôn khổ "Foundation" và "Cocoa" là gì? Liệu Cocoa có đứng đầu trong khuôn khổ Quỹ? – Leo

+0

Có, Cocoa có thể được gọi là lớp thư viện trên cùng nằm trên đỉnh Quỹ (xem http://goo.gl/H22M8g). Nói cách khác, mô tả là một chút không chính xác trong thời điểm này - Cocoa chỉ là một phần của ngăn xếp phần mềm do Apple cung cấp để viết phần mềm. – zoul

+0

Câu trả lời rất hay và giải thích .. và thực sự giúp tôi biết sự khác biệt. Nhưng ở đây có một câu hỏi khác :) bởi các thư viện Cocoa; nó giống như API? – Ahmadgeo

6

Xcode là môi trường phát triển tích hợp (IDE) —ứng dụng mà nhà phát triển sử dụng để viết phần mềm cho iOS và/hoặc OS X. Nó bao gồm trình chỉnh sửa, hệ thống xây dựng (xác định nội dung cần xây dựng để tạo mục tiêu mong muốn) và một vài thứ khác nữa.

Mục tiêu-C là ngôn ngữ chính mà các nhà phát triển viết phần mềm như vậy. Họ có thể viết các bit bằng C, sử dụng C++ hoặc kết hợp nó với Objective-C (tạo Objective-C++) hoặc viết một số hoặc tất cả chương trình bằng ngôn ngữ khác hoàn toàn, chẳng hạn như MacRuby, Java (với j2objc), hoặc C# (với MonoTouch).

Xcode bao gồm trình biên dịch Clang, biến mã được viết bằng Objective-C, C và một vài ngôn ngữ khác thành mã thực thi. Hầu hết các thông báo lỗi đến từ Clang và Xcode dựa chủ yếu vào việc lập chỉ mục tìm kiếm, đánh dấu cú pháp và hoàn thành tên của mã Objective-C.

Cocoa và Cocoa Touch là các khung ứng dụng. Mỗi một là một bộ khung của nhiều cá nhân (thư viện được lưu trữ trong các thư mục có tên blahblah.khuôn khổ), chẳng hạn như:

  • Foundation (cả hai): chung hướng đối tượng tiện ích, bao gồm NSString, NSURL, NSFileManager vv
    • Lõi Foundation (cả hai): Chủ yếu là điều tương tự, nhưng khác nhau, chủ yếu ở việc có một API C-dựa chứ không phải là Objective-C
  • Application Kit (Mac): ứng dụng và cửa sổ khung
  • UIKit (iOS): ứng dụng và cửa sổ khung
  • lõi Gr aphics (cả hai): Vẽ
  • Core Animation (cả hai): Sprite quản lý và hoạt hình khuôn khổ

(và nhiều, nhiều hơn nữa, nơi họ đến từ đâu, đặc biệt là trên máy Mac)

Vì vậy:

  • bạn có thể sử dụng một khuôn khổ bên cạnh Cocoa hoặc Cocoa Touch, nhưng bạn sẽ cần phải có một số mã Cocoa/Cocoa Touch, ở một mức độ nào, để cho ứng dụng của bạn để nói chuyện với hệ thống, tiếp nhận các sự kiện, vẽ, vv t nhắm mục tiêu cụ thể Mac và/hoặc iOS sẽ bao gồm các trình bao bọc có liên quan cho bạn, ở các mức chất lượng khác nhau.
  • Bạn có thể sử dụng ngôn ngữ ngoài Objective-C, nhưng bạn sẽ có rất nhiều cú pháp, vì hầu hết Cocoa và Cocoa Touch được thiết kế cho các tính năng cú pháp duy nhất của Objective-C (đặc biệt là bộ chọn).
  • Bạn có thể sử dụng một trình soạn thảo bên cạnh Xcode và thậm chí bạn có thể sử dụng một hệ thống xây dựng bên cạnh Xcode (chẳng hạn như make), nhưng App Store của Apple mong đợi các ứng dụng được xây dựng theo cách đặc biệt (đặc biệt liên quan đến ký mã). không nhắm mục tiêu App Stores, bất kỳ hệ thống xây dựng nào khác phải nhân rộng những gì Xcode làm hoặc mạo hiểm người dùng của nó bị từ chối.
1

Lỗi rõ ràng là không phân biệt Xcode với mọi thứ khác. Xcode là công cụ bạn đang sử dụng để lập trình - để chỉnh sửa mã, chạy mã, v.v. Vì vậy, nếu bạn gặp sự cố với công cụ (ví dụ: cửa sổ không hiển thị cho bạn mã của bạn đúng cách hoặc bạn đang có rắc rối khi vẽ giao diện của bạn, v.v.), đó là vấn đề Xcode.

Nếu bạn không hiểu tại sao mã của bạn không hoạt động, có thể bạn đang gặp sự cố với mục tiêu C hoặc vấn đề về Cocoa. Nhưng bạn sẽ không nhất thiết phải biết cái nào.

  • Đây là một vấn đề Objective-C nếu gốc rễ của vấn đề của bạn là bạn không biết cách thức hoạt động ngôn ngữ (ví dụ như bạn không biết những gì các dấu hoa thị là dành cho, hoặc tuyên bố đó không phải là instantiation, hoặc tin nhắn đó không có lỗi nhưng cũng không làm gì cả).

  • Đó là vấn đề về Cocoa nếu bạn không nắm bắt kiến ​​trúc đại biểu hoặc cách bộ điều khiển chế độ xem hoạt động.

Nhưng kinh nghiệm của tôi về cách mọi người đặt ra câu hỏi là bạn có thể không biết gì về các bạn là không biết gì về. Tôi không có nghĩa là bạn cá nhân, tôi có nghĩa là tất cả chúng ta.Điều này có thể gây khó khăn cho việc đặt ra câu hỏi đúng bởi vì bạn không biết chính xác nó là gì mà bạn không biết - nếu bạn đã làm, bạn biết điều đó và có thể bạn sẽ không gặp vấn đề gì đang khắc phục sự cố và điều tiếp theo).

0

Đó là sự khác biệt giữa bút, tiếng Anh và thư viện công cộng.

@catfish_man

Các vấn đề liên quan