#importieren Sie mit spitzen Klammern <> und Anführungszeichen ""

120

Ich frage mich, was entscheidet, ob Sie Dateien verwenden dürfen <Header.h>oder "Header.h"wann Sie Dateien in Objective-C importieren. Bisher habe ich beobachtet, dass Sie die Anführungszeichen ""für Dateien in Ihrem Projekt verwenden, für die Sie die Implementierungsquelle haben, und spitze Klammern, <>wenn Sie auf eine Bibliothek oder ein Framework verweisen.

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

Wenn ich mir einige Framework-Header ansehe, sehe ich auch, dass die Header sich gegenseitig referenzieren <frameworkname/file.h>. Wie funktioniert diese Arbeit? Es sieht sehr nach Paketen in Java aus, aber meines Wissens gibt es in Objective-C kein Paket.

Quano
quelle

Antworten:

122

Objective-C hat dies mit C / C ++ gemeinsam. Das zitierte Formular ist für "lokale" Includes von Dateien (Sie müssen den relativen Pfad aus der aktuellen Datei angeben, z. B. #include "headers/my_header.h"), während das spitze Klammerformular für "globale" Includes gilt - diejenigen, die sich irgendwo auf dem Include-Pfad befinden, der an übergeben wird der Compiler (z#include <math.h> ).

Damit Ihre eigenen Header < >nicht verwendet werden " ", müssen Sie weder den relativen noch den absoluten Pfad für Ihr Header-Verzeichnis an den Compiler übergeben. Siehe "Hinzufügen eines globalen Include-Pfads für Xcode"Informationen dazu in Xcode finden .

Weitere Informationen finden Sie auf dieser MSDN-Seite .

Mark Pim
quelle
1
Ich hatte gerade ein Problem mit einem GitHub-Projekt, das AFNetworking als #import <AFNetworking / AFHTTPRequestOperationManager.h> referenzierte, also musste ich $ (SRCROOT) / lib / AFNetworking als Header-Suchpfad verwenden. Unter diesem Ordner befindet sich ein weiterer Ordner mit dem Namen AFNetworking, in dem der 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
Es scheint, dass der Grund der gleiche ist wie für C / C ++. Die spitze Klammer (gekennzeichnet durch das Symbol <>) gibt an, dass nach einer anderen Datei als dem aktuellen lokalen Verzeichnis gesucht wird, während Anführungszeichen (gekennzeichnet durch das Symbol "") die Suche nach einer Datei im aktuellen lokalen Verzeichnis angeben.
Jayprakash Dubey
Der Link am Ende der Antwort ist veraltet.
Pang
14

In C wird die Konvention verwendet, dass Header-Dateien in <>Klammern in 'System'-Verzeichnissen und ""in Benutzer- oder lokalen Verzeichnissen durchsucht werden .

Die Definition von System und lokal ist etwas vage, denke ich. Ich glaube, es sucht in Systemverzeichnissen im Include-Pfad oder in CPPFLAGS nach <header.h>, und das lokale Verzeichnis oder Verzeichnis, das mit -I für den Compiler angegeben wurde, wird nach "header.h" -Dateien durchsucht.

Ich gehe davon aus, dass es für Objective-C ähnlich funktioniert.

stefanB
quelle
6

Um Ihre eigenen Klassen mit "<>" zu importieren, müssen Sie die Header-Dateien (* .h) in den lib-Ordner des Compilers legen oder ein SYSTEM VARIABLES-Ponting für Ihren lib-Ordner festlegen.

Rodrigo Reis
quelle
2

Oder stellen Sie ein Always Search User Path, YESdamit Sie spitze Klammern verwenden können.

Ida88
quelle
1

Mit spitzen Klammern z <Foundation/Foundation.h> importieren Sie Systemdateien.

Sie verwenden doppelte Anführungszeichen "Person.h", um lokale Dateien (von Ihnen erstellte Dateien) zu importieren und dem Compiler mitzuteilen, wo er nach ihnen suchen soll.

Suppewaylee
quelle
1

<Name.h>- Angle bracketsweist den Präprozessor an, in den Verzeichnissen eines speziellen vordefinierten Systems zu suchen . Beispielsweise importieren Sie Systemheader wie <UIKit/UIKit.h>oder fügen Frameworks hinzu

"Name.h"- Quotation marksWeist den Präprozessor an, in einem aktuellen Verzeichnis zu suchen . Wenn kein Header gefunden wurde, versucht der Präprozessor ihn zu verwenden <Name.h>. Normalerweise sollten Sie es mit den Dateien Ihres Projekts verwenden

yoAlex5
quelle
0

Gerade über das gleiche Problem gestolpert, gibt es 2 Arten von Suchpfaden ist Xcode:

User Header Search Paths
Header Search Paths

Wenn Sie Ihren Header-Suchpfaden eigene Include-Ordner hinzufügen, können Sie problemlos spitze Klammern verwenden.

fatihk
quelle
-4

WAS IST HEADER FILE? Header-Dateien enthalten Definitionen von Funktionen und Variablen, die mithilfe der Anweisung #include des Vorprozessors in jedes C-Programm integriert werden können. Standard-Header-Dateien werden mit jedem Compiler geliefert und decken eine Reihe von Bereichen ab: Zeichenfolgenbehandlung, Mathematik, Datenkonvertierung, Drucken und Lesen von Variablen. Schließen Sie ein, dass es die Informationen über Eingaben wie scanf () und Ausgaben wie printf () und so weiter in einem Compiler enthält.

EINSCHLIESSEN

1) #INCLUDE: - Es ist ein Vorprozessor, der vor dem Prozess der Hauptfunktion verarbeitet. Die Hauptarbeit des Vorprozessors besteht darin, die Umgebung des Programms zu initialisieren, dh das Programm mit der Header-Datei. 2) .h: - (Header-Datei) Eine Header-Datei ist eine Datei mit der Erweiterung .h, die C-Funktionsdeklarationen und Makrodefinitionen enthält und von mehreren Quelldateien gemeinsam genutzt werden soll. F) Es gibt zwei Arten von Header-Dateien: die Dateien, die der Programmierer schreibt, und die Dateien, die mit Ihrem Compiler geliefert werden? A) In eckigen Klammern Die eckige Klammerform steht für "globale" Includes - diejenigen, die sich irgendwo auf dem an den Compiler übergebenen Include-Pfad befinden (z. B. #include). Sie wird für die Verwendung von Bibliotheksfunktionen verwendet, die alle im Compiler definiert sind. In C wird die Konvention verwendet, dass Header-Dateien in der Klammer <> in 'system' durchsucht werden. Verzeichnisse B) Anführungszeichen: - Das Anführungszeichen "header.h" steht für "lokale" Includes von Dateien (Sie müssen den relativen Pfad aus der aktuellen Datei angeben, z. B. #include "headers / my_header.h") In C die Konvention ist, dass Header-Dateien in "" in Benutzer- oder lokalen Verzeichnissen durchsucht werden. Darin soll eine Datei in eine andere aufgenommen werden (FILE INCLUSION). Es kann in zwei Fällen verwendet werden: Fall 1: Wenn wir ein sehr großes Programm haben, wird der Code am besten in mehrere verschiedene Dateien aufgeteilt, die jeweils eine Reihe verwandter Funktionen enthalten. Fall 2: Es gibt einige Funktionen und Mikrodefinitionen, die wir höchstens in allen Programmen benötigen, die wir schreiben. Ex ) In C ist die Konvention, dass Header-Dateien in "" in Benutzer- oder lokalen Verzeichnissen durchsucht werden. Darin soll eine Datei in eine andere aufgenommen werden (FILE INCLUSION). Es kann in zwei Fällen verwendet werden: Fall 1: Wenn wir ein sehr großes Programm haben, wird der Code am besten in mehrere verschiedene Dateien aufgeteilt, die jeweils eine Reihe verwandter Funktionen enthalten. Fall 2: Es gibt einige Funktionen und Mikrodefinitionen, die wir höchstens in allen Programmen benötigen, die wir schreiben. Ex ) In C ist die Konvention, dass Header-Dateien in "" in Benutzer- oder lokalen Verzeichnissen durchsucht werden. Darin soll eine Datei in eine andere aufgenommen werden (FILE INCLUSION). Es kann in zwei Fällen verwendet werden: Fall 1: Wenn wir ein sehr großes Programm haben, wird der Code am besten in mehrere verschiedene Dateien aufgeteilt, die jeweils eine Reihe verwandter Funktionen enthalten. Fall 2: Es gibt einige Funktionen und Mikrodefinitionen, die wir höchstens in allen Programmen benötigen, die wir schreiben. Ex

anitesh975
quelle