Что такое пустое объявление @interface в файлах .m?

Я начал новый проект iOS 5 и заметил что-то новое в верхней части каждого файла .m

#import "HomeViewController.h"

@interface HomeViewController ()

@end

@implementation HomeViewController
@synthesize ...
  • Этот дополнительный @interface... требуется, если у меня есть отдельный файл .h?
  • Почему это не появилось в проектах pre iOS 5?
  • Могу ли я использовать это вместо отдельного файла .h?
  • Какова наилучшая практика для этого?

Ответ 1

Это расширение . Вы можете использовать его, чтобы сделать объявления, которые не хотите находиться в файле .h.

Это использовалось многими разработчиками, даже ранее, которые вручную добавили расширение в файл .m. Поэтому я предполагаю, что Apple включила это в шаблон, потому что оно широко используется и считается хорошей практикой.

Фактически, файл .h должен использоваться только для того, чтобы сделать объявления, которые будут использоваться из других файлов. Возможно, вам придется объявить некоторые свойства, методы или константы, которые будут использоваться только внутри файла .m. Для этих объявлений лучше сделать их в расширении класса.

Итак, чтобы ответить на ваши вопросы:

  • Этот дополнительный @interface... требуется, если у меня есть отдельный файл .h?

Нет, это не требуется, но это лучшая практика.

  • Почему это не появилось в проектах pre iOS 5?

Даже если это была обычная практика, она не была включена в шаблон.

  • Могу ли я использовать это вместо отдельного файла .h?

Нет. Расширение класса не заменяет файл .h, где вы должны объявить "общедоступный" интерфейс вашего класса.

  • Какова наилучшая практика для этого?

Вы должны поместить в расширение класса все объявления, которые не должны быть видимыми вне файла .m.

Ответ 2

Раздел интерфейса в файле реализации позволяет объявлять переменные, свойства и методы, которые являются частными, что означает, что они не будут видны другими классами.

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