Принятие протокола из категории - PullRequest
5 голосов
/ 06 июля 2011

Я хотел убедиться, что это исправление действительно работает и не окажет негативного влияния на мой код:

Я создал статическую библиотеку с открытым заголовком MyClass.h, остальная часть моего кодавсе скрыто.MyClass принимает протокол MyProtocol, который определен в MyProtocol.h.Я хочу сохранить MyProtocol.h скрытым, но поскольку MyClass.h является публичным заголовком, он не может найти MyProtocol.h, если я попытаюсь скрыть его как заголовок проекта.Мое решение:

MyClass.h:

@interface MyClass : NSObject {
    //instance variables
}
// methods
@end

MyClass.m:

#import "MyProtocol.h"
@interface MyClass() <MyProtocol>
@end

@implementation MyClass
// implementation
@end

Я не видел других примеров такого рода вещей, которые делают другиечем здесь: Может ли категория одновременно реализовывать протокол? , и проблема / ответы в конечном итоге не имеют отношения к исходному вопросу.Поэтому я хотел быть уверен, что это действительно делает то, на что похоже, и / или посмотреть, есть ли лучший способ достичь того, что я пытаюсь сделать.

1 Ответ

6 голосов
/ 06 июля 2011

То, что вы предлагаете, совершенно законно и является прекрасным решением вашей проблемы.

Существует одно тонкое семантическое различие, которое могло бы запутать ваши поиски в Google по этой теме.Используя пустые скобки в вашем примере, вы технически объявили «расширение класса», а не «категорию».Тонкое отличие состоит в том, что компилятор требует, чтобы методы, объявленные внутри расширения класса, были реализованы в главном блоке @implementation вашего класса.Напротив, методы, объявленные в именованной категории, реализуются в отдельном именованном блоке реализации, часто в отдельном файле .m.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...