#import с использованием угловых скобок <> и кавычек "" - PullRequest
109 голосов
/ 25 июня 2009

Мне интересно, что решает, разрешено ли вам использовать <Header.h> или "Header.h" при импорте файлов в Objective-C. До сих пор я наблюдал, что вы используете кавычки "" для файлов в вашем проекте, к которым у вас есть источник реализации, и угловые скобки <> при обращении к библиотеке или фреймворку.

Но как именно это работает? Что мне нужно сделать, чтобы мои классы использовали скобки? Прямо сейчас XCode не позволит мне сделать это для моих собственных заголовков.

Кроме того, просматривая заголовки некоторых фреймворков, я вижу, что заголовки ссылаются друг на друга <frameworkname/file.h>. Как это работает? Это очень похоже на пакеты в Java, но, насколько я знаю, в Objective-C нет такой вещи, как пакет.

Ответы [ 8 ]

112 голосов
/ 25 июня 2009

Objective-C имеет это общее с C / C ++; форма в кавычках предназначена для «локальных» включений файлов (необходимо указать относительный путь из текущего файла, например, #include "headers/my_header.h"), в то время как форма угловых скобок предназначена для «глобальных» включений - найденных где-то на включении путь к компилятору (например, #include <math.h>).

Таким образом, чтобы ваши собственные заголовки использовали < >, а не " ", вам нужно передать компилятору относительный или абсолютный путь для вашего каталога заголовков. См. «Как добавить глобальный путь включения для Xcode» для получения информации о том, как сделать это в Xcode.

Подробнее см. на этой странице MSDN .

13 голосов
/ 25 июня 2009

В C принято, что заголовочные файлы в скобках <> ищутся в системных каталогах, а "" в пользовательских или локальных каталогах.

Я думаю, что определение системы и локальности немного расплывчато. Я полагаю, что он просматривает системные каталоги во включаемом пути или в CPPFLAGS, и для локального каталога или каталога, указанного с -I для компилятора, ищутся файлы "header.h".

Я предполагаю, что это работает аналогично Objective-C.

6 голосов
/ 25 июня 2009

Чтобы импортировать свои собственные классы, используя "<>", вы должны поместить файлы заголовков (* .h) в папку lib компилятора или установить ponting SYSTEM VARIABLES в вашу папку lib.

2 голосов
/ 28 апреля 2017

Или установите Always Search User Path на YES, чтобы можно было использовать угловые скобки.

1 голос
/ 22 марта 2019

с угловыми скобками, например <Foundation/Foundation.h> Вы импортируете системные файлы.

Вы используете двойные кавычки "Person.h", чтобы импортировать локальные файлы (файлы, которые вы создали) и сообщить компилятору, где их искать.

1 голос
/ 16 января 2019

"" - Quotation marks Найдите указанный файл в той же папке, что и этот файл (файл .m, в котором находится строка #import).

<> - Angle brackets Ищите названный файл среди различных путей поиска заголовка, указанных в настройках сборки. (Эти пути поиска устанавливаются автоматически, и вам обычно не нужно их изменять.)

Как правило, вы используете угловые скобки для ссылки на файл заголовка, принадлежащий API-интерфейсу Cocoa, и кавычки для ссылки на файл заголовка, который вы написали. Если вам интересно, что импортирует директива #import, выберите ее (в Xcode) и выберите «Файл» → «Быстро открыть», чтобы отобразить содержимое назначенного файла заголовка.

Подробнее здесь - https://www.oreilly.com/library/view/programming-ios-6/9781449365783/ch01s10.html

0 голосов
/ 15 июня 2015

Просто наткнулся на ту же проблему, есть 2 типа путей поиска Xcode:

User Header Search Paths
Header Search Paths

Если вы добавляете свои собственные папки включения в пути поиска заголовка, вы можете без проблем использовать угловые скобки.

0 голосов
/ 06 декабря 2014

Что такое файл заголовка? Заголовочные файлы содержат определения функций и переменных, которые могут быть включены в любую C-программу с помощью оператора препроцессора #include. Стандартные заголовочные файлы поставляются с каждым компилятором и охватывают различные области, обработку строк, математические операции, преобразование данных, печать и чтение переменных. Ex- #include содержит информацию о вводе, например, scanf (), и выводит его как функцию printf () и т. Д. В компиляторе.

INCLUDE

1) # ВКЛЮЧИТЬ: - Это препроцессор, который обрабатывает перед процессом основной функции. Основная работа препроцессора заключается в инициализации среды программы, то есть программы с файлом заголовка. 2) .h: - (Заголовочный файл) Заголовочный файл - это файл с расширением .h, который содержит объявления функций C и определения макросов и может использоваться несколькими исходными файлами. Q) Есть два типа заголовочных файлов: файлы, которые пишет программист, и файлы, которые поставляются с вашим компилятором? А) В угловых скобках Форма угловых скобок предназначена для «глобальных» включений - найденных где-то в пути включения, передаваемом компилятору (например, #include) Используется для использования библиотечной функции, которую все готово определить в компиляторе. В С соглашается, что заголовочные файлы в скобках <> ищутся в системных каталогах Б) Кавычки: - «header.h» форма в кавычках предназначена для «локальных» включений файлов (необходимо указать относительный путь из текущего файла, например, #include «headers / my_header.h») В С соглашением, что заголовочные файлы в "" ищутся в пользовательских или локальных каталогах. В нем один файл должен быть включен в другой. (ВКЛЮЧЕНИЕ ФАЙЛА). Может использоваться в двух случаях: Случай 1: если у нас очень большая программа, код лучше всего разделить на несколько разных файлов, каждый из которых содержит набор связанных функций. Случай 2: есть некоторые определения функций и микроопределений, которые нам нужны максимум во всех программах, которые мы пишем. Ex

...