2009-06-25 2 views
103

Ich frage mich, was entscheidet, ob Sie <Header.h> oder "Header.h" verwenden dürfen, wenn Sie Dateien in Objective-C importieren. Bisher habe ich festgestellt, dass Sie die Anführungszeichen "" für Dateien in Ihrem Projekt, zu denen Sie die Implementierungsquelle haben, und die spitzen Klammern <> verwenden, wenn Sie eine Bibliothek oder ein Framework referenzieren.#import mit spitzen Klammern < > und Anführungszeichen ""

Aber wie genau funktioniert das? Was müsste ich tun, um meine eigenen Klassen für die Verwendung der Klammern zu verwenden? Im Moment erlaubt Xcode mir das nicht für meine eigenen Header.

Wenn ich in einigen Frameworks-Headern nachschaue, sehe ich, dass sich die Header mit <frameworkname/file.h> gegenseitig referenzieren. Wie funktioniert das arbeiten? Es sieht den Paketen in Java sehr ähnlich, aber soweit ich weiß, gibt es in Objective-C kein Paket.

Antwort

104

Objective-C hat das gemeinsam mit C/C++; Das zitierte Formular bezieht sich auf "lokale" Include-Dateien (Sie müssen den relativen Pfad aus der aktuellen Datei angeben, z. B. #include "headers/my_header.h"), während die angle-bracket-Form für "global" enthält - diejenigen, die irgendwo auf dem Include-Pfad gefunden werden an den Compiler (zB #include <math.h>).

Um Ihre eigenen Header verwenden < > nicht " " müssen Sie entweder den relativen oder absoluten Pfad für Ihr Header-Verzeichnis an den Compiler übergeben. Informationen dazu, wie man das in Xcode macht, finden Sie unter "How to add a global include path for Xcode".

Weitere Informationen finden Sie unter this MSDN page.

+1

Ich hatte gerade ein Problem mit einem GitHub-Projekt, das AFNetworking als #import referenziert, also musste ich $ (SRCROOT)/lib/AFNetworking als Header-Suchpfad verwenden. Unter diesem Ordner befindet sich ein weiterer Ordner mit dem Namen AFNetworking, der beim Import mit spitzen Klammern diesen Pfad findet. Normalerweise würde #import "AFHTTPRequestOperationManager.h" funktionieren, aber für dieses Projekt wird nur anders darauf verwiesen. – Brennan

6

Um eigene Klassen mit "<>" zu importieren, müssen Sie die Header-Dateien (* .h) in den lib-Ordner des Compilers stellen oder eine SYSTEM VARIABLES-Datei in Ihren lib-Ordner einfügen.

12

In C ist die Konvention, dass Header-Dateien in <> Klammer in 'System' Verzeichnisse und "" in Benutzer- oder lokalen Verzeichnissen gesucht werden.

Die Definition von System und lokal ist ein bisschen vage, denke ich. Ich glaube, es sieht in Systemverzeichnisse in Include-Pfad oder in CPPFLAGS für und lokale Verzeichnis oder Verzeichnis mit -I zum Compiler suchen nach "header.h" -Dateien gesucht.

Ich nehme an, es funktioniert ähnlich für Objective-C.

-3

WAS IST HEADER-DATEI? Header-Dateien enthalten Definitionen von Funktionen und Variablen, die in ein beliebiges C-Programm mit der #include-Anweisung vor dem Prozessor eingefügt werden können. Standard-Header-Dateien sind mit jedem Compiler zur Verfügung gestellt und decken eine Reihe von Bereichen, String-Handling, mathematische, Datenkonvertierung, Drucken und Lesen von Variablen. Ex- #include es enthalten die Informationen über die Eingabe wie scanf() und output wie printf() -Funktion und etc in einem Compiler.

INCLUDE

1) #INCLUDE: - Es ist ein Pre-Prozessor, den Prozess vor dem Prozess der Hauptfunktion. Die Hauptarbeit des Vorprozessors ist die Initialisierung der Programmumgebung, d. H. Das ist das Programm mit der Header-Datei. 2) .h: - (Headerdatei) Eine Headerdatei ist eine Datei mit der Erweiterung .h, die C-Funktionsdeklarationen und Makrodefinitionen enthält und von mehreren Quelldateien gemeinsam genutzt werden kann. Q) Es gibt zwei Arten von Header-Dateien: die Dateien, die der Programmierer schreibt und die Dateien, die mit Ihrem Compiler kommen? A) In eckigen Klammern Angular-Klammer-Form ist für "global" enthält - diejenigen irgendwo auf dem Include-Pfad an den Compiler übergeben (zB #include) Es wird für die Verwendung der Bibliotheksfunktion verwendet, die alle bereit ist zu definieren im Kompilierer. In C ist die Konvention, dass Header-Dateien in <> Klammer in 'System' Verzeichnisse gesucht werden B) Anführungszeichen: - "header.h" zitiert Form ist für "lokale" enthält Dateien (Sie müssen die relative angeben Pfad von der aktuellen Datei, zB #include "headers/my_header.h") In C ist die Konvention, dass Header-Dateien in "" in Benutzer- oder lokalen Verzeichnissen gesucht werden. Darin eine Datei, die in eine andere eingefügt werden soll. (DATEI INKLUSION). Es kann in zwei Fällen verwendet werden: Fall 1: Wenn wir ein sehr großes Programm haben, ist der Code am besten in mehrere verschiedene Dateien unterteilt, von denen jede eine Reihe von verwandten Funktionen enthält. Fall 2: Es gibt einige Funktionen und Micros-Definitionen, die wir höchstens in allen Programmen benötigen, die wir schreiben. Ex

0

stolperte über das gleiche Problem gibt es zwei Arten von Suchpfaden Xcode ist:

User Header Search Paths 
Header Search Paths 

Wenn Sie fügen Sie Ihre eigenen sind Ordner in Header-Suchpfade, können Sie ohne Probleme spitzen Klammern verwenden .

1

Oder setzen Sie Always Search User Path auf YES, so dass Sie spitze Klammern verwenden können.