คำตอบที่ดีที่คุณสามารถหาได้ในหนังสือเรียนรู้โกโก้ด้วย Objective-C (ISBN: 978-1-491-90139-7)
โมดูลเป็นวิธีการใหม่ในการรวมและเชื่อมโยงไฟล์และไลบรารีเข้ากับโครงการของคุณ เพื่อให้เข้าใจถึงการทำงานของโมดูลและประโยชน์ที่ได้รับสิ่งสำคัญคือการมองย้อนกลับไปในประวัติศาสตร์ของ Objective-C และคำสั่ง #import เมื่อใดก็ตามที่คุณต้องการรวมไฟล์สำหรับการใช้งานโดยทั่วไปคุณจะมีรหัสบางอย่างที่มีลักษณะดังนี้:
#import "someFile.h"
หรือในกรณีของกรอบ:
#import <SomeLibrary/SomeFile.h>
เนื่องจาก Objective-C เป็นชุดภาษาการเขียนโปรแกรม C ดังนั้นสถานะ #import จึงมีการปรับแต่งเล็กน้อยตาม#include
คำสั่งของ C คำสั่ง #include นั้นง่ายมาก มันจะคัดลอกทุกสิ่งที่พบในไฟล์ที่รวมอยู่ในรหัสของคุณในระหว่างการรวบรวม บางครั้งอาจทำให้เกิดปัญหาที่สำคัญ ตัวอย่างเช่นสมมติว่าคุณมีไฟล์ส่วนหัวสองไฟล์: SomeFileA.h
และSomeFileB.h
; SomeFileA.h
รวมถึงSomeFileB.h
และรวมถึงSomeFileB.h
SomeFileA.h
สิ่งนี้สร้างลูปและสามารถสร้างความสับสน เพื่อจัดการกับสิ่งนี้โปรแกรมเมอร์ C ต้องเขียน guards กับเหตุการณ์ประเภทนี้ไม่ให้เกิดขึ้น
เมื่อใช้#import
งานคุณไม่จำเป็นต้องกังวลเกี่ยวกับปัญหานี้หรือเขียนการ์ดส่วนหัวเพื่อหลีกเลี่ยงปัญหานี้ อย่างไรก็ตาม#import
ยังคงเป็นเพียงการดำเนินการคัดลอกและวางที่ได้รับการยกย่องทำให้การรวบรวมช้าลงในโฮสต์ของปัญหาอื่น ๆ ที่มีขนาดเล็กลง แต่ยังคงเป็นอันตรายมาก (เช่นไฟล์ที่รวมอยู่เหนือสิ่งที่คุณได้ประกาศไว้ในรหัสของคุณเอง)
โมดูลเป็นความพยายามที่จะหลีกเลี่ยงปัญหานี้ พวกเขาไม่ได้คัดลอกและวางลงในซอร์สโค้ดอีกต่อไป แต่การแสดงไฟล์ที่รวมไว้อย่างต่อเนื่องซึ่งสามารถนำเข้าสู่ซอร์สโค้ดของคุณได้ก็ต่อเมื่อมีความจำเป็น โดยใช้โมดูลรหัสโดยทั่วไปจะรวบรวมได้เร็วขึ้นและมีความปลอดภัยกว่าการใช้ #include #import
หรือ
กลับไปที่ตัวอย่างก่อนหน้าของการนำเข้าเฟรมเวิร์ก:
#import <SomeLibrary/SomeFile.h>
ในการนำเข้าไลบรารีนี้เป็นโมดูลรหัสจะถูกเปลี่ยนเป็น:
@import SomeLibrary;
นี่เป็นโบนัสเพิ่มเติมของ Xcode ที่เชื่อมโยงกรอบ SomeLibrary เข้ากับโครงการโดยอัตโนมัติ โมดูลยังอนุญาตให้คุณรวมเฉพาะส่วนประกอบที่คุณต้องการในโครงการของคุณ ตัวอย่างเช่นหากคุณต้องการใช้องค์ประกอบ AwesomeObject ในกรอบงาน AwesomeLibrary โดยปกติคุณจะต้องนำเข้าทุกอย่างเพื่อใช้ชิ้นเดียว อย่างไรก็ตามการใช้โมดูลคุณสามารถนำเข้าเฉพาะวัตถุที่คุณต้องการใช้:
@import AwesomeLibrary.AwesomeObject;
สำหรับโครงการใหม่ทั้งหมดที่ทำใน Xcode 5 โมดูลจะถูกเปิดใช้งานตามค่าเริ่มต้น หากคุณต้องการใช้โมดูลในโครงการเก่า (และคุณควรจริง ๆ ) จะต้องเปิดใช้งานโมดูลเหล่านั้นในการตั้งค่าการสร้างโครงการ เมื่อคุณทำเช่นนั้นคุณสามารถใช้ทั้งสอง#import
และ@import
คำสั่งในรหัสของคุณด้วยกันโดยไม่ต้องกังวลใด ๆ