@interface Foo()
создает расширение класса (я исправлен, подпорки к bbum) на интерфейсе Foo, которое похоже на дополнительные методы, добавленные в интерфейс. Некоторые люди также используют @interafce Foo(Private)
(категория) вместо расширения класса с ()
. Это больше похоже на «внедрение» новых методов в класс извне класса.
Помещение этого в файл .m просто мешает другим "видеть его" в файле .h, но это все. Обычно люди используют категории или расширения классов в файлах .m для указания частных интерфейсов, но они также используются для таких вещей, как UIKit использует категории для добавления row
и section
открытых методов в NSIndexPath. (Это может сбить с толку.)
На самом деле вам не нужно определять частные методы таким образом, но если у вас есть метод с именем bar, который вызывает метод foo до того, как foo определен в исходном файле, вы получите предупреждение компилятора, что-то вроде: ответить на foo ". Вы можете избавиться от этого, определив foo до того, как определите bar или любой другой вызывающий foo код. То же самое с простым C и функциями.
Подобно тому, как Оле говорит, что это не мешает никому вызывать закрытые методы, оно просто объявляет о вашем намерении, чтобы они были закрытыми, и заставляет компилятор генерировать предупреждения «возможно, не отвечать», даже если они импортируют файл .h.
EDIT
Также см. http://www.friday.com/bbum/2009/09/11/class-extensions-explained/ для объяснения категорий и расширений классов. Похоже, расширения классов должны быть более правильными для определения приватных методов с точки зрения предупреждения компилятора, потому что методы категории являются необязательными. Хотелось бы, чтобы моя книга объяснила это!