#import menggunakan tanda kurung sudut <> dan tanda kutip “”

120

Saya bertanya-tanya apa yang memutuskan apakah Anda diizinkan menggunakan <Header.h>atau "Header.h"saat Anda mengimpor file di Objective-C. Sejauh ini pengamatan saya adalah Anda menggunakan tanda kutip ""untuk file dalam proyek Anda yang sumber implementasinya Anda miliki, dan tanda kurung sudut <>saat Anda mereferensikan perpustakaan atau kerangka kerja.

Tapi bagaimana tepatnya cara kerjanya? Apa yang harus saya lakukan agar kelas saya dapat menggunakan tanda kurung? Saat ini Xcode tidak mengizinkan saya melakukannya untuk header saya sendiri.

Selain itu, dengan melihat di beberapa header framework, saya melihat bahwa header tersebut merujuk satu sama lain <frameworkname/file.h>. Bagaimana itu bekerja? Ini terlihat sangat mirip dengan paket di Java, tetapi sejauh yang saya tahu, tidak ada yang namanya paket di Objective-C.

quano
sumber

Jawaban:

122

Objective-C memiliki kesamaan ini dengan C / C ++; bentuk kutipan adalah untuk "lokal" termasuk file (Anda perlu menentukan jalur relatif dari file saat ini, misalnya #include "headers/my_header.h"), sedangkan bentuk kurung sudut adalah untuk "global" termasuk - yang ditemukan di suatu tempat di jalur include yang diteruskan ke kompiler (misalnya #include <math.h>).

Jadi untuk menggunakan header Anda sendiri, Anda < >tidak " "perlu meneruskan jalur relatif atau absolut untuk direktori header Anda ke kompilator. Lihat "Cara menambahkan jalur penyertaan global untuk Xcode" untuk info tentang cara melakukannya di Xcode.

Lihat halaman MSDN ini untuk info lebih lanjut.

Mark Pim
sumber
1
Saya baru saja mengalami masalah dengan proyek GitHub yang merujuk AFNetworking sebagai #import <AFNetworking / AFHTTPRequestOperationManager.h> jadi saya harus $ (SRCROOT) / lib / AFNetworking sebagai Jalur Pencarian Header. Di bawah folder ini adalah folder lain bernama AFNetworking yang mana impor dengan tanda kurung sudut menemukannya dengan jalur itu. Biasanya #import "AFHTTPRequestOperationManager.h" akan berfungsi tetapi untuk proyek ini hanya mereferensikannya secara berbeda.
Brennan
Sepertinya alasannya sama dengan C / C ++. Tanda kurung siku (dilambangkan dengan simbol <>) menunjukkan bahwa pencarian file selain direktori lokal saat ini sedangkan tanda kutip (dilambangkan dengan simbol "") menunjukkan pencarian file di direktori lokal saat ini.
Jayprakash Dubey
Tautan di akhir jawaban sudah usang.
Pang
14

Di C, konvensi adalah bahwa file header dalam <>braket dicari di direktori 'sistem' dan ""di direktori pengguna atau lokal.

Definisi sistem dan lokal agak kabur, saya kira. Saya yakin ini terlihat di direktori sistem di jalur penyertaan atau di CPPFLAGS untuk <header.h>, dan direktori lokal atau direktori yang ditentukan dengan -I ke kompiler dicari untuk file "header.h".

Saya berasumsi bahwa cara kerjanya sama untuk Objective-C.

StefanB
sumber
6

Untuk mengimpor kelas Anda sendiri menggunakan "<>" Anda harus meletakkan file header (* .h) di folder lib compiler atau mengatur ponting VARIABEL SISTEM ke folder lib Anda.

Rodrigo Reis
sumber
2

Atau mengatur Always Search User Pathuntuk YESsehingga Anda dapat menggunakan kurung sudut.

Ida88
sumber
1

Dengan tanda kurung sudut misalnya <Foundation/Foundation.h>Anda mengimpor file sistem.

Anda menggunakan tanda kutip ganda "Person.h"untuk mengimpor file lokal (file yang Anda buat) dan untuk memberitahu compiler di mana mencarinya.

supwaylee
sumber
1

<Name.h>- Angle bracketsmemberitahu preprocessor untuk mencari di direktori sistem khusus yang telah ditentukan sebelumnya. Misalnya Anda mengimpor header sistem seperti <UIKit/UIKit.h>atau menambahkan kerangka kerja

"Name.h"- Quotation marksmemberitahu preprocessor untuk mencari di direktori saat ini . Jika header tidak ditemukan preprocessor coba gunakan <Name.h>. Biasanya Anda harus menggunakannya dengan file proyek Anda

yoAlex5
sumber
0

Baru saja menemukan masalah yang sama, ada 2 jenis jalur pencarian yaitu Xcode:

User Header Search Paths
Header Search Paths

Jika Anda menambahkan folder include Anda sendiri ke dalam Jalur Pencarian Header, Anda dapat menggunakan tanda kurung siku tanpa masalah.

fatihk
sumber
-4

APA ITU HEADER FILE? File header berisi definisi fungsi dan variabel yang dapat digabungkan ke dalam program C apa pun dengan menggunakan pernyataan pra-prosesor #include. File header standar disediakan dengan setiap compiler, dan mencakup berbagai area, penanganan string, matematika, konversi data, pencetakan dan pembacaan variabel. Mis- #include itu berisi informasi tentang input seperti scanf (), dan output seperti fungsi printf () dan lain-lain dalam kompiler.

TERMASUK

1) # TERMASUK: - Ini adalah pra-prosesor yang memproses sebelum proses fungsi utama. Pekerjaan utama pra-prosesor adalah menginisialisasi lingkungan program, yaitu program dengan file header. 2) .h: - (File header) File header adalah file dengan ekstensi .h yang berisi deklarasi fungsi C dan definisi makro dan untuk dibagikan di antara beberapa file sumber. T) Ada dua jenis file header: file yang ditulis oleh programmer dan file yang disertakan dengan kompiler Anda? A) Dalam tanda kurung sudut Bentuk braket sudut adalah untuk "global" termasuk - yang ditemukan di suatu tempat di jalur include diteruskan ke kompilator (misalnya #include) Ini digunakan untuk menggunakan fungsi perpustakaan yang semuanya siap ditentukan dalam kompilator. Dalam C konvensi adalah bahwa file header di <> braket dicari di 'sistem' direktori B) Tanda kutip: - bentuk kutipan "header.h" adalah untuk "lokal" menyertakan file (Anda perlu menentukan jalur relatif dari file saat ini, misalnya #include "headers / my_header.h") Dalam C konvensi adalah file header di "" dicari di direktori pengguna atau lokal. Di dalamnya satu file akan dimasukkan dalam file lain. (FILE INCLUSION). Ini dapat digunakan dalam dua kasus: Kasus 1: Jika kita memiliki program yang sangat besar, kode sebaiknya dibagi menjadi beberapa file berbeda, masing-masing berisi satu set fungsi terkait. Kasus 2: Ada beberapa definisi fungsi dan mikro yang paling kita butuhkan di semua program yang kita tulis. Ex ) Dalam C konvensi adalah bahwa file header di "" dicari di direktori pengguna atau lokal. Di dalamnya satu file akan dimasukkan dalam file lain. (FILE INCLUSION). Ini dapat digunakan dalam dua kasus: Kasus 1: Jika kita memiliki program yang sangat besar, kode sebaiknya dibagi menjadi beberapa file berbeda, masing-masing berisi satu set fungsi terkait. Kasus 2: Ada beberapa definisi fungsi dan mikro yang paling kita butuhkan di semua program yang kita tulis. Ex ) Dalam C konvensi adalah bahwa file header di "" dicari di direktori pengguna atau lokal. Di dalamnya satu file akan dimasukkan dalam file lain. (FILE INCLUSION). Ini dapat digunakan dalam dua kasus: Kasus 1: Jika kita memiliki program yang sangat besar, kode sebaiknya dibagi menjadi beberapa file berbeda, masing-masing berisi satu set fungsi terkait. Kasus 2: Ada beberapa definisi fungsi dan mikro yang paling kita butuhkan di semua program yang kita tulis. Ex

anitesh975
sumber