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