Чем отличается include от import?
Суть
Все три — способы подключить объявления из другого файла.
#include "a.h"— директива препроцессора C: текстовая вставка файла. Если один заголовок попадает дважды (через цепочку включений), получите ошибку «redefinition». Защищаются вручную include guard'ами (#ifndef A_H / #define A_H / #endif) или#pragma once.#import "a.h"— расширение Objective-C: та же текстовая вставка, но препроцессор сам помнит, что файл уже включён, и второй раз пропускает. Guard'ы не нужны. Стандарт для .h/.m.@import Foundation;— модули (Clang modules, с Xcode 5). Это не вставка текста, а подключение заранее скомпилированного описания фреймворка (module map + сериализованный AST). Плюсы: компиляция быстрее (заголовок разбирается один раз на все файлы), автолинковка фреймворка — не нужно добавлять его в Link Binary With Libraries, макросы модуля не «протекают» в ваш код. При включённой опции Enable Modules обычный#import <Foundation/ Foundation.h>для системных фреймворков компилятор неявно превращает в@import.
#import <Foundation/Foundation.h> // неявно станет @import Foundation;
@import UIKit; // явный модуль, автолинковка
#import "MyModel.h" // свой заголовок, защита от повторов
#include <stdlib.h> // чистый C
Форма <...> ищет в системных путях и фреймворках, "..." — сначала рядом с файлом.
Продолжение ответа с кодом и уточняющими вопросами интервьюера — в приложении DevPrep.
Полный ответ — в DevPrep