Câu trả lời hay mà bạn có thể tìm thấy trong cuốn sách Học ca cao với Objective-C (ISBN: 980-1-491-90139-7)
Các mô-đun là một phương tiện mới bao gồm và liên kết các tệp và thư viện vào các dự án của bạn. Để hiểu cách các mô-đun hoạt động và những lợi ích mà chúng có, điều quan trọng là phải nhìn lại lịch sử của Objective-C và câu lệnh #import Bất cứ khi nào bạn muốn bao gồm một tệp để sử dụng, bạn thường sẽ có một số mã giống như sau:
#import "someFile.h"
Hoặc trong trường hợp khung:
#import <SomeLibrary/SomeFile.h>
Vì Objective-C là siêu ngôn ngữ của lập trình C, trạng thái #import là một sàng lọc nhỏ đối với #include
tuyên bố của C. Câu lệnh #include rất đơn giản; nó sao chép mọi thứ nó tìm thấy trong tệp được bao gồm vào mã của bạn trong quá trình biên dịch. Điều này đôi khi có thể gây ra vấn đề đáng kể. Ví dụ, hãy tưởng tượng bạn có hai tệp tiêu đề: SomeFileA.h
và SomeFileB.h
; SomeFileA.h
bao gồm SomeFileB.h
, và SomeFileB.h
bao gồm SomeFileA.h
. Điều này tạo ra một vòng lặp và có thể gây nhầm lẫn cho coimpiler. Để đối phó với điều này, các lập trình viên C phải viết các vệ sĩ chống lại loại sự kiện này xảy ra.
Khi sử dụng #import
, bạn không cần phải lo lắng về vấn đề này hoặc viết các bộ bảo vệ tiêu đề để tránh nó. Tuy nhiên, #import
vẫn chỉ là một hành động sao chép và dán được tôn vinh, gây ra thời gian biên dịch chậm giữa một loạt các vấn đề nhỏ hơn nhưng vẫn rất nguy hiểm (chẳng hạn như một tệp được ghi đè lên một cái gì đó bạn đã khai báo ở nơi khác trong mã của riêng bạn.)
Các mô-đun là một nỗ lực để có được xung quanh này. Chúng không còn là một bản sao và dán vào mã nguồn, mà là một đại diện nối tiếp của các tệp được bao gồm có thể được nhập vào mã nguồn của bạn chỉ khi và khi cần thiết. Bằng cách sử dụng các mô-đun, mã thường sẽ biên dịch nhanh hơn và an toàn hơn so với sử dụng #include hoặc #import
.
Quay trở lại ví dụ trước về nhập khung:
#import <SomeLibrary/SomeFile.h>
Để nhập thư viện này dưới dạng mô-đun, mã sẽ được thay đổi thành:
@import SomeLibrary;
Điều này có thêm phần thưởng Xcode liên kết khung công tác Một số thư viện vào dự án. Các mô-đun cũng cho phép bạn chỉ bao gồm các thành phần bạn thực sự cần vào dự án của bạn. Ví dụ: nếu bạn muốn sử dụng thành phần AwesomeObject trong khung AwesomeL Library, thông thường bạn sẽ phải nhập mọi thứ chỉ để sử dụng một phần. Tuy nhiên, bằng cách sử dụng các mô-đun, bạn chỉ có thể nhập đối tượng cụ thể mà bạn muốn sử dụng:
@import AwesomeLibrary.AwesomeObject;
Đối với tất cả các dự án mới được thực hiện trong Xcode 5, các mô-đun được bật theo mặc định. Nếu bạn muốn sử dụng các mô-đun trong các dự án cũ (và bạn thực sự nên), chúng sẽ phải được bật trong cài đặt xây dựng của dự án. Khi bạn làm điều đó, bạn có thể sử dụng cả hai #import
và các @import
câu lệnh trong mã của mình cùng nhau mà không cần quan tâm.