#import bằng cách sử dụng dấu ngoặc nhọn <> và dấu ngoặc kép “”


120

Tôi đang tự hỏi điều gì quyết định bạn được phép sử dụng <Header.h>hay "Header.h"khi bạn nhập tệp trong Objective-C. Cho đến nay, quan sát của tôi là bạn sử dụng dấu ngoặc kép ""cho các tệp trong dự án của bạn mà bạn có nguồn triển khai và dấu ngoặc nhọn <>khi bạn tham khảo thư viện hoặc khuôn khổ.

Nhưng chính xác thì nó hoạt động như thế nào? Tôi sẽ phải làm gì để các lớp của riêng tôi sử dụng dấu ngoặc? Ngay bây giờ, Xcode sẽ không cho phép tôi làm điều đó đối với các tiêu đề của riêng tôi.

Ngoài ra, bằng cách xem xét một số tiêu đề khung, tôi thấy rằng các tiêu đề tham chiếu lẫn nhau với <frameworkname/file.h>. Làm thế nào để làm việc? Nó trông rất giống các gói trong Java, nhưng theo tôi biết, không có cái gì gọi là gói trong Objective-C.

Câu trả lời:


122

Objective-C có điểm chung với C / C ++; biểu mẫu được trích dẫn dành cho "cục bộ" bao gồm các tệp (ví dụ: bạn cần chỉ định đường dẫn tương đối từ tệp hiện tại #include "headers/my_header.h"), trong khi biểu mẫu dấu ngoặc nhọn dành cho "toàn cục" bao gồm - những tệp được tìm thấy ở đâu đó trên đường dẫn bao gồm được chuyển đến trình biên dịch (ví dụ #include <math.h>).

Vì vậy, để sử dụng tiêu đề của riêng bạn, bạn < >không " "cần phải chuyển đường dẫn tương đối hoặc tuyệt đối cho thư mục tiêu đề của bạn đến trình biên dịch. Xem "Cách thêm đường dẫn bao gồm toàn cục cho Xcode" để biết thông tin về cách thực hiện điều đó trong Xcode.

Xem trang MSDN này để biết thêm thông tin.


1
Tôi vừa gặp sự cố với dự án GitHub tham chiếu AFNetworking là #import <AFNetworking / AFHTTPRequestOperationManager.h> vì vậy tôi phải $ (SRCROOT) / lib / AFNetworking làm Đường dẫn tìm kiếm tiêu đề. Dưới thư mục này là một thư mục khác có tên AFNetworking, đây là cách nhập với dấu ngoặc nhọn tìm thấy nó với đường dẫn đó. Thông thường, #import "AFHTTPRequestOperationManager.h" sẽ hoạt động nhưng đối với dự án này, nó chỉ tham chiếu khác.
Brennan

Có vẻ như lý do cũng giống như đối với C / C ++. Dấu ngoặc nhọn (biểu thị bằng ký hiệu <>) cho biết tìm kiếm tệp khác với thư mục cục bộ hiện tại trong khi dấu ngoặc kép (ký hiệu bằng ký hiệu "") cho biết tìm kiếm tệp trong thư mục cục bộ hiện tại.
Jayprakash Dubey

Liên kết ở cuối câu trả lời đã lỗi thời.
Pang

14

Trong C, quy ước là các tệp tiêu đề trong <>ngoặc được tìm kiếm trong thư mục 'hệ thống' và ""trong thư mục người dùng hoặc thư mục cục bộ.

Định nghĩa về hệ thống và cục bộ hơi mơ hồ, tôi đoán vậy. Tôi tin rằng nó tìm kiếm trong các thư mục hệ thống trong đường dẫn bao gồm hoặc trong CPPFLAGS cho <header.h>, và thư mục cục bộ hoặc thư mục được chỉ định với trình biên dịch -I to được tìm kiếm các tệp "header.h".

Tôi cho rằng nó hoạt động tương tự cho Objective-C.


6

Để nhập các lớp của riêng bạn bằng cách sử dụng "<>", bạn phải đặt các tệp tiêu đề (* .h) trong thư mục lib của trình biên dịch hoặc đặt BIẾN CHỨNG HỆ THỐNG vào thư mục lib của bạn.


2

Hoặc đặt thành Always Search User Pathđể YESbạn có thể sử dụng dấu ngoặc nhọn.


1

Với dấu ngoặc nhọn, ví dụ <Foundation/Foundation.h>bạn nhập các tệp hệ thống.

Bạn sử dụng dấu ngoặc kép "Person.h"để nhập tệp cục bộ (tệp bạn đã tạo) và để cho trình biên dịch biết nơi tìm chúng.


1

<Name.h>- Angle bracketsyêu cầu bộ xử lý trước tìm kiếm trong các thư mục đặc biệt của hệ thống được chỉ định trước. Ví dụ: bạn nhập các tiêu đề hệ thống như <UIKit/UIKit.h>hoặc thêm các khuôn khổ

"Name.h"- Quotation marksyêu cầu bộ xử lý tiền xử lý tìm kiếm trong thư mục hiện tại . Nếu không tìm thấy tiêu đề, bộ xử lý trước sẽ cố gắng sử dụng <Name.h>. Thông thường, bạn nên sử dụng nó với các tệp dự án của mình


0

Chỉ tình cờ gặp vấn đề tương tự, có 2 loại đường dẫn tìm kiếm là Xcode:

User Header Search Paths
Header Search Paths

Nếu bạn thêm thư mục bao gồm của riêng mình vào Đường dẫn Tìm kiếm Tiêu đề, bạn có thể sử dụng dấu ngoặc nhọn mà không gặp bất kỳ vấn đề gì.


-4

HEADER FILE LÀ GÌ? Tệp tiêu đề chứa các định nghĩa về hàm và biến có thể được kết hợp vào bất kỳ chương trình C nào bằng cách sử dụng câu lệnh #include của bộ xử lý trước. Các tệp tiêu đề chuẩn được cung cấp với mỗi trình biên dịch và bao gồm một loạt các lĩnh vực, xử lý chuỗi, toán học, chuyển đổi dữ liệu, in và đọc các biến. Ví dụ: #include nó chứa thông tin về đầu vào như scanf (), và đưa ra như hàm printf () và v.v. trong trình biên dịch.

BAO GỒM

1) #INCLUDE: - Nó là bộ xử lý trước xử lý trước quá trình của chức năng chính. Công việc chính của pre-processor là khởi tạo môi trường của chương trình tức là chương trình có tệp tiêu đề. 2) .h: - (Tệp tiêu đề) Tệp tiêu đề là tệp có phần mở rộng .h chứa khai báo hàm C và định nghĩa macro và được chia sẻ giữa một số tệp nguồn. Q) Có hai loại tệp tiêu đề: tệp mà người lập trình viết và tệp đi kèm với trình biên dịch của bạn? A) Trong một dấu ngoặc nhọn Dạng ngoặc nhọn dành cho "toàn cục" bao gồm - những cái được tìm thấy ở đâu đó trên đường dẫn bao gồm được chuyển đến trình biên dịch (ví dụ: #include) Nó được sử dụng để sử dụng hàm thư viện, tất cả đã sẵn sàng được xác định trong trình biên dịch. Trong C quy ước là các tệp tiêu đề trong dấu ngoặc nhọn <> được tìm kiếm trong 'hệ thống' thư mục B) Dấu ngoặc kép: - Dạng trích dẫn “header.h” dành cho các tệp bao gồm "cục bộ" (bạn cần chỉ định đường dẫn tương đối từ tệp hiện tại, ví dụ: #include "headers / my_header.h") Trong C quy ước là tệp tiêu đề trong "" được tìm kiếm trong thư mục người dùng hoặc thư mục cục bộ. Trong đó một tệp sẽ được đưa vào tệp khác. (BAO GỒM TẬP TIN). Nó có thể được sử dụng trong hai trường hợp: Trường hợp 1: Nếu chúng ta có một chương trình rất lớn, mã tốt nhất nên được chia thành nhiều tệp khác nhau, mỗi tệp chứa một tập hợp các hàm liên quan. Trường hợp 2: Có một số hàm và định nghĩa vi mô mà chúng ta cần nhiều nhất trong tất cả các chương trình mà chúng ta viết. Ví dụ ) Trong C, quy ước là các tệp tiêu đề trong "" được tìm kiếm trong thư mục người dùng hoặc thư mục cục bộ. Trong đó một tệp sẽ được đưa vào tệp khác. (BAO GỒM TẬP TIN). Nó có thể được sử dụng trong hai trường hợp: Trường hợp 1: Nếu chúng ta có một chương trình rất lớn, mã tốt nhất nên được chia thành nhiều tệp khác nhau, mỗi tệp chứa một tập hợp các hàm liên quan. Trường hợp 2: Có một số hàm và định nghĩa vi mô mà chúng ta cần nhiều nhất trong tất cả các chương trình mà chúng ta viết. Ví dụ ) Trong C, quy ước là các tệp tiêu đề trong "" được tìm kiếm trong thư mục người dùng hoặc thư mục cục bộ. Trong đó một tệp sẽ được đưa vào tệp khác. (BAO GỒM TẬP TIN). Nó có thể được sử dụng trong hai trường hợp: Trường hợp 1: Nếu chúng ta có một chương trình rất lớn, mã tốt nhất nên được chia thành nhiều tệp khác nhau, mỗi tệp chứa một tập hợp các hàm liên quan. Trường hợp 2: Có một số hàm và định nghĩa vi mô mà chúng ta cần nhiều nhất trong tất cả các chương trình mà chúng ta viết. Ví dụ

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.