Вопрос по ios, objective-c – Объявить интерфейс внутри файла реализации (Objective-C)

3

В последней версии XCode (4.3) я видел, что предопределенные шаблоны (такие как шаблон Master / Detail), в которых объявление интерфейса выполняется в файле .m. Например, в файле MyFile.h есть:

@interface MyFile

@property (nonatomic, retain) NSString *someProp;

@end

И в файле MyFile.m есть:

@implementation MyFile

@interface MyFile {
    NSString * anotherProp;
}

- (id) init...

Почему это сделано таким образом? Почему еще один объект не объявлен в файле MyFile.h?

заранее спасибо

Вы правы, я отправил это по памяти и забыл скобки rai212
Это не то, на что это похоже, потому что это неверный код. Вероятно, это так:@interface MyFile () { NSString * anotherPropt } @end @implementation MyFile - (id) init {...в этом случае смотрите:stackoverflow.com/questions/9751057/… Josh Caswell

Ваш Ответ

1   ответ
5

@interface ClassName() {

    Declarations;

}

Methods;

@end

Они называются расширением класса. Они похожи на категории, но могут быть объявлены только в реализации класса, а не в каком-либо другом классе. Использование расширений заключается в том, чтобы повторно объявить свойство public или readwrite, а также объявить более новые, если это необходимо. просто позволяет вам объявлять свойства и переменные в местах, отличных от @interface, так что имя extensios.

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

@roronoa Как получить доступ к методам класса интерфейса внутри реализации другого класса? я пытаюсь объявить это имя класса интерфейса в другом классе представления, что имя класса не заполнено ....
Вы правы, я забыл скобки. Спасибо за объяснение, теперь я понимаю rai212
Категории также могут создавать непубличные методы (поскольку любой метод «непубличный» в ObjC, во всяком случае), если их объявление скрыто. Различия заключаются в том, что методы, объявленные в расширениях, должны быть определены в первичном блоке класса @implementation, и что расширения могут (начиная с нескольких ревизий компилятора назад) объявлять ivars.

Похожие вопросы