Прежде всего, в Objective-C мы используем #import
, что отличается от #include
. В то время как #include
попытается включить любой файл из списка, #import
никогда не будет дважды импортировать какой-либо файл. Я предполагаю, что это объясняет, почему нет проблем с .h
файлом, пытающимся #import
себя. Неправильно, чтобы файл импортировал себя, но, поскольку это #import
, это не вызовет никаких проблем.
Что касается файла .m
, который не импортирует файл .h
, в данном случае это не обязательно. Это хорошая идея, по привычке всегда импортировать файл .h
, и любые файлы, сгенерированные Xcode, будут делать это автоматически, однако это не всегда необходимо. Это необходимо только тогда, когда файл .h
объявил что-то, о чем должен знать .m
. Например, @property
, который вы собираетесь использовать. Вы объявили его в .h
, чтобы он имел общий доступ, но если вы собираетесь использовать его в .m
, .m
должен знать, что @property
определено. Кроме того, если вы #import
отредактировали некоторые файлы в .h
, которые нужны .m
, и вы не хотите снова импортировать их в .m
, вам придется импортировать .h
(хотя, как правило, лучше просто импортировать их в .m
.
Здесь .h
просто определяет существование метода, который возвращает NSString *
и вызывается md5
и не принимает аргументов. Это означает, что все, что импортирует этот файл .h
, может вызвать этот метод, и Xcode не будет жаловаться на то, что метод md5
не существует. Соответствующий файл .m
реализует метод, который совпадает с тем, который определен в .h
. Если вы удалите файл .m
, ваша программа почти наверняка все равно скомпилируется нормально... но вы столкнетесь с нераспознанным исключением селектора, когда дойдете до того момента, когда вызывается md5
, несмотря на то, что Xcode не жалуется на это. С .m
в проекте это исключение не попадает. Программа определяет во время выполнения, какой метод следует выполнить.
И, наконец, что касается исключения Foundation.h
, каждый проект iOS, созданный Xcode, имеет #import Foundation.h
и #import UIKit.h
в предварительно скомпилированном заголовочном файле. Любой другой файл в вашем проекте с этим импортом просто избыточно импортирует файл, поскольку он уже был импортирован .pch
, но из-за магии #import
(по сравнению с #include
) он фактически не импортируется дважды.
Если вы работаете с проектом iOS, в котором нет этих импортов в файле .pch
, лучше всего просто вставить их в файл .pch
.
Если вы по какой-то причине не согласны с этим, лучший способ исправить этот файл md5
— это простая строка:
@import Foundation.NSString;
person
nhgrif
schedule
18.05.2014