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