Objective C预处理器:获取当前类

时间:2011-04-23 17:07:29

标签: objective-c c-preprocessor

有没有办法在预处理器中获取当前作用域的类?

目前,我正在做的是:

我有一个宏:

#define DATA_SOURCE_DEF_CONSTR(CLASS) + (CLASS *)dataSource { \
CLASS *source = [[[CLASS alloc] init] autorelease]; \
return source; \
}

然后我在许多类中使用该宏,如:

DATA_SOURCE_DEF_CONSTR(SpecialDataSource)

我想要像:

#define DATA_SOURCE_DEF_CONSTR + (__CLASS__ *)dataSource { \
__CLASS__ *source = [[[__CLASS__ alloc] init] autorelease]; \
return source; \
}

并称之为:

@implementation ...

DATA_SOURCE_DEF_CONSTR

...

@end

使用预处理器在Objective-C中可以实现吗?

2 个答案:

答案 0 :(得分:2)

我没有得到你想要完成的任务。为什么不直接向NSObject添加一个类别,如:

@implementation NSObject (handyConstructor)

+ autoreleasedInstance { return [[[self class] alloc] init] autorelease]; }

@end

您是否有理由希望特别是预处理器完成此操作?

答案 1 :(得分:1)

有一个新的关键字instancetype,或许可以帮到你;更多here。以你的例子:

#define DATA_SOURCE_DEF_CONSTR + (instancetype)dataSource { \
return [[[[self class] alloc] init] autorelease]; \
}