Положить методы в отдельных файлах - PullRequest
4 голосов
/ 25 мая 2010

У меня есть класс (MyClass) с множеством методов. Следовательно, файл .m стал довольно трудно читать. Я относительно новичок в Objective-C (пришедший из REALbasic), и мне было интересно, можно ли поместить некоторые методы из MyClass в разные файлы и затем включить их в класс. Как мне поступить об этом в Xcode?

Ответы [ 3 ]

9 голосов
/ 25 мая 2010

Да, это возможно, и, к счастью, это легко сделать в Objective-C с категориями .


Допустим, у вас есть базовый класс MyClass.

@interface MyClass : NSObject
-(void) methodA;
@end

И соответствующий файл реализации (здесь не актуально).

Затем вы можете создать категорию, определив новый интерфейс в новом заголовочном файле:

// the category name is in parenthesis, can be anything but must be unique
@interface MyClass (extended) 
-(void) methodB;
@end

и файле реализации:

@implementation MyClass (extended)
-(void) methodB {

}
@end

Общее соглашение к имениэти файлы ClassToAddMethodsTo + CatgoryName , то есть:

MyClass+extended.h
MyClass+extended.m

Группируйте связанные функции по категориям и дайте им значимое имя.

5 голосов
/ 25 мая 2010

В Objective-c вы можете разбить класс на ' категории ' - класс, разбросанный по многим файлам. Обычный объектно-ориентированный способ - использовать суперклассы и подклассы.

Это почти наверняка запах кода , говорящий вам, что у вас есть проблема с дизайном. Посмотреть это антипаттерн

0 голосов
/ 11 октября 2013

Есть одна вещь, которую вы могли бы сделать ..........
Но будьте осторожны, некоторые могут считать это чистым богохульством. :)

Скажем, у вас есть класс с двумя методами, которые вы хотите иметь в отдельных файлах. У вас будет три файла:

• Class.h
• Класс.м
• Class_otherMethod.m



Ваш Class.h должен выглядеть так же, как и любой другой. Я думаю, что лучше сохранить файл заголовка завершенным, но этот «трюк» может работать и с разделением файлов .h.

@interface Class : NSObject

- (void) method;
- (void) otherMethod;

@end


В вашем Class.m файле вы будете #include Class_otherMethod.m внутри Class @implementation следующим образом:

#import "Class.h"

@implementation Class

- (void) method {

    // do something.
}


#include "Class_otherMethod.m"

@end


И ваш Class_otherMethod.m файл будет иметь только голую реализацию otherMethod:

- (void) otherMethod {

    // do something different.
}




Почему это работает

Это довольно просто на самом деле. Препроцессор просто «вставляет» содержимое Class_otherMethod.m в файл Class.m , и компилятор обрабатывает его как один большой длинный файл. : P


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