# นำเข้าโดยใช้วงเล็บมุม <> และเครื่องหมายคำพูด“”


120

ฉันสงสัยว่าอะไรเป็นตัวตัดสินว่าคุณได้รับอนุญาตให้ใช้<Header.h>หรือ"Header.h"เมื่อคุณนำเข้าไฟล์ใน Objective-C จนถึงตอนนี้ข้อสังเกตของฉันคือคุณใช้เครื่องหมายคำพูด""สำหรับไฟล์ในโครงการของคุณที่คุณมีแหล่งที่มาของการนำไปใช้และวงเล็บเหลี่ยม<>เมื่อคุณอ้างอิงไลบรารีหรือเฟรมเวิร์ก

แต่มันทำงานอย่างไร? ฉันต้องทำอย่างไรเพื่อให้ชั้นเรียนของตัวเองใช้วงเล็บได้ ตอนนี้ Xcode ไม่อนุญาตให้ฉันทำสิ่งนั้นกับส่วนหัวของตัวเอง

<frameworkname/file.h>นอกจากนี้โดยมองในบางส่วนหัวกรอบผมเห็นว่าส่วนหัวอ้างอิงกันและกันด้วย อย่างไรที่ทำงานหรือไม่ ดูเหมือนแพ็คเกจใน Java แต่เท่าที่ฉันรู้ไม่มีสิ่งที่เรียกว่าแพ็คเกจใน Objective-C

คำตอบ:


122

Objective-C มีสิ่งนี้เหมือนกันกับ C / C ++; รูปแบบที่ยกมามีไว้สำหรับไฟล์ "local" (คุณต้องระบุพา ธ สัมพัทธ์จากไฟล์ปัจจุบันเช่น#include "headers/my_header.h") ในขณะที่รูปแบบวงเล็บมุมสำหรับ "global" รวมถึง - ที่พบในเส้นทางรวมที่ส่งผ่านไปยัง คอมไพเลอร์ (เช่น#include <math.h>)

ดังนั้นเพื่อให้ส่วนหัวของคุณใช้< >ไม่ได้" "คุณไม่จำเป็นต้องส่งผ่านญาติหรือพา ธ สัมบูรณ์สำหรับไดเร็กทอรีส่วนหัวของคุณไปยังคอมไพเลอร์ ดู"วิธีการเพิ่มเส้นทางการรวมโกลบอลสำหรับ Xcode"สำหรับข้อมูลเกี่ยวกับวิธีการดังกล่าวใน Xcode

ดูหน้า MSDNสำหรับข้อมูลเพิ่มเติม


1
ฉันเพิ่งมีปัญหากับโปรเจ็กต์ GitHub ที่อ้างถึง AFNetworking เป็น #import <AFNetworking / AFHTTPRequestOperationManager.h> ดังนั้นฉันจึงต้อง $ (SRCROOT) / lib / AFNetworking เป็นเส้นทางการค้นหาส่วนหัว ภายใต้โฟลเดอร์นี้คือโฟลเดอร์อื่นชื่อ AFNetworking ซึ่งเป็นวิธีที่การนำเข้าด้วยวงเล็บมุมมองพบกับเส้นทางนั้น โดยปกติ #import "AFHTTPRequestOperationManager.h" จะใช้งานได้ แต่สำหรับโครงการนี้จะอ้างอิงต่างกัน
Brennan

ดูเหมือนว่าเหตุผลจะเหมือนกับ C / C ++ วงเล็บมุม (แสดงโดยสัญลักษณ์ <>) ระบุว่าค้นหาไฟล์อื่นที่ไม่ใช่ไดเร็กทอรีโลคัลปัจจุบันในขณะที่เครื่องหมายคำพูด (แสดงด้วยสัญลักษณ์ "") ระบุว่าค้นหาไฟล์ในไดเร็กทอรีโลคัลปัจจุบัน
Jayprakash Dubey

ลิงก์ท้ายคำตอบล้าสมัย
ปาง

14

ใน C หลักการคือไฟล์ส่วนหัวใน<>วงเล็บจะถูกค้นหาในไดเร็กทอรี 'system' และ""ในไดเร็กทอรีผู้ใช้หรือโลคัล

ฉันเดาว่าคำจำกัดความของระบบและท้องถิ่นนั้นค่อนข้างคลุมเครือ ฉันเชื่อว่ามันดูในไดเร็กทอรีระบบใน include path หรือใน CPPFLAGS สำหรับ <header.h> และโลคัลไดเร็กทอรีหรือไดเร็กทอรีที่ระบุด้วย -I ไปยังคอมไพเลอร์จะค้นหาไฟล์ "header.h"

ฉันคิดว่ามันทำงานในทำนองเดียวกันสำหรับ Objective-C


6

ในการนำเข้าคลาสของคุณเองโดยใช้ "<>" คุณต้องใส่ไฟล์ส่วนหัว (* .h) ในโฟลเดอร์ lib ของคอมไพเลอร์หรือตั้งค่า SYSTEM VARIABLES ในโฟลเดอร์ lib ของคุณ


2

หรือตั้งค่าAlways Search User Pathเพื่อYESให้คุณสามารถใช้วงเล็บเหลี่ยมได้


1

ด้วยวงเล็บเหลี่ยมเช่น<Foundation/Foundation.h>คุณนำเข้าไฟล์ระบบ

คุณใช้เครื่องหมายคำพูดคู่"Person.h"เพื่อนำเข้าไฟล์ในเครื่อง (ไฟล์ที่คุณสร้างขึ้น) และเพื่อบอกคอมไพลเลอร์ว่าจะค้นหาที่ไหน


1

<Name.h>- Angle bracketsบอกให้พรีโปรเซสเซอร์ค้นหาในไดเร็กทอรีของระบบที่กำหนดไว้ล่วงหน้าพิเศษ ตัวอย่างเช่นคุณนำเข้าส่วนหัวของระบบเช่น<UIKit/UIKit.h>หรือเพิ่มเฟรมเวิร์ก

"Name.h"- Quotation marksบอกให้พรีโปรเซสเซอร์ค้นหาในไดเร็กทอรีปัจจุบัน ถ้าหัวไม่พบลอง preprocessor <Name.h>กับการใช้งาน โดยปกติคุณควรใช้กับไฟล์ของโครงการของคุณ


0

เพิ่งสะดุดกับปัญหาเดียวกันเส้นทางการค้นหามี 2 ประเภทคือ Xcode:

User Header Search Paths
Header Search Paths

หากคุณเพิ่มโฟลเดอร์รวมของคุณเองลงใน Header Search Paths คุณสามารถใช้วงเล็บเหลี่ยมได้โดยไม่มีปัญหา


-4

ไฟล์ส่วนหัวคืออะไร? ไฟล์ส่วนหัวประกอบด้วยคำจำกัดความของฟังก์ชันและตัวแปรซึ่งสามารถรวมเข้ากับโปรแกรม C ใดก็ได้โดยใช้คำสั่ง #include ก่อนตัวประมวลผล ไฟล์ส่วนหัวมาตรฐานมีให้กับแต่ละคอมไพเลอร์และครอบคลุมพื้นที่ต่างๆการจัดการสตริงทางคณิตศาสตร์การแปลงข้อมูลการพิมพ์และการอ่านตัวแปร Ex- #include มีข้อมูลเกี่ยวกับอินพุตเช่น scanf () และ out put เช่น printf () function และอื่น ๆ ในคอมไพเลอร์

รวม

1) #INCLUDE: - เป็นตัวประมวลผลล่วงหน้าที่ประมวลผลก่อนกระบวนการของฟังก์ชันหลัก งานหลักของตัวประมวลผลล่วงหน้าคือการเริ่มต้นสภาพแวดล้อมของโปรแกรมนั่นคือโปรแกรมที่มีไฟล์ส่วนหัว 2) .h: - (ไฟล์ส่วนหัว) ไฟล์ส่วนหัวคือไฟล์ที่มีนามสกุล. h ซึ่งมีการประกาศฟังก์ชัน C และคำจำกัดความของมาโครและจะใช้ร่วมกันระหว่างไฟล์ต้นฉบับหลายไฟล์ ถาม) ไฟล์ส่วนหัวมีสองประเภทคือไฟล์ที่โปรแกรมเมอร์เขียนและไฟล์ที่มาพร้อมกับคอมไพเลอร์ของคุณ? A) ในวงเล็บเหลี่ยมรูปแบบ Angular-bracket มีไว้สำหรับ "global" รวมถึง - สิ่งที่พบในเส้นทางรวมที่ส่งไปยังคอมไพเลอร์ (เช่น #include) ใช้สำหรับการใช้ฟังก์ชันไลบรารีซึ่งพร้อมกำหนดทั้งหมดในคอมไพเลอร์ ใน C หลักการคือไฟล์ส่วนหัวในวงเล็บ <> จะถูกค้นหาใน 'system' ไดเร็กทอรี B) เครื่องหมายคำพูด: - แบบฟอร์มที่ยกมา "header.h" สำหรับ "local" รวมถึงไฟล์ (คุณต้องระบุพา ธ สัมพัทธ์จากไฟล์ปัจจุบันเช่น #include "headers / my_header.h") ใน C การประชุม คือไฟล์ส่วนหัวใน "" จะถูกค้นหาในไดเร็กทอรีของผู้ใช้หรือโลคัล จะรวมไฟล์ไว้ในอีกไฟล์หนึ่ง (การรวมไฟล์) สามารถใช้ได้ในสองกรณี: กรณีที่ 1: หากเรามีโปรแกรมขนาดใหญ่มากโค้ดจะถูกแบ่ง int ไฟล์ที่แตกต่างกันออกไปได้ดีที่สุดโดยแต่ละไฟล์จะมีชุดฟังก์ชันที่เกี่ยวข้องกัน กรณีที่ 2: มีฟังก์ชันและนิยามไมโครบางอย่างที่เราต้องการมากที่สุดในทุกโปรแกรมที่เราเขียน อดีต ) ใน C หลักการคือไฟล์ส่วนหัวใน "" จะถูกค้นหาในไดเร็กทอรีผู้ใช้หรือโลคัล จะรวมไฟล์ไว้ในอีกไฟล์หนึ่ง (การรวมไฟล์) สามารถใช้ได้ในสองกรณี: กรณีที่ 1: หากเรามีโปรแกรมขนาดใหญ่มากโค้ดจะถูกแบ่ง int ไฟล์ที่แตกต่างกันออกไปได้ดีที่สุดโดยแต่ละไฟล์จะมีชุดฟังก์ชันที่เกี่ยวข้องกัน กรณีที่ 2: มีฟังก์ชันและนิยามไมโครบางอย่างที่เราต้องการมากที่สุดในทุกโปรแกรมที่เราเขียน อดีต ) ใน C หลักการคือไฟล์ส่วนหัวใน "" จะถูกค้นหาในไดเร็กทอรีผู้ใช้หรือโลคัล จะรวมไฟล์ไว้ในอีกไฟล์หนึ่ง (การรวมไฟล์) สามารถใช้ได้ในสองกรณี: กรณีที่ 1: หากเรามีโปรแกรมขนาดใหญ่มากโค้ดจะถูกแบ่ง int ไฟล์ที่แตกต่างกันออกไปได้ดีที่สุดโดยแต่ละไฟล์จะมีชุดฟังก์ชันที่เกี่ยวข้องกัน กรณีที่ 2: มีฟังก์ชันและนิยามไมโครบางอย่างที่เราต้องการมากที่สุดในทุกโปรแกรมที่เราเขียน อดีต

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.