Macros和ARC的奇怪问题

时间:2013-02-20 11:34:36

标签: objective-c cocoa macros automatic-ref-counting llvm

好的,所以这是我的问题......

我的宏定义

#define DRK_INIT(X) -(id)init \
{ \
self = [super init]; \
if (self) { \
X \
} \
return self; \
}

#define DRK_DEALLOC(X) -(void)dealloc \
{ \
X \
[super dealloc]; \
}

#define DRK_DICFROMFILE(X)          [NSDictionary dictionaryWithContentsOfFile:(X)]
#define DRK_MUTDICFROMFILE(X)       [NSMutableDictionary dictionaryWithContentsOfFile:(X)]
#define DRK_ARRFROMFILE(X)          [NSArray arrayWithContentsOfFile:(X)]
#define DRK_MUTARRFROMFILE(X)       [NSMutableArray arrayWithContentsOfFile:(X)]
#define DRK_STRFROMFILE(X)          [NSString stringWithContentsOfFile:(X) encoding:NSUTF8StringEncoding error:nil]

#define DRK_WRITESTRTOFILE(X,Y)     [(X) writeToFile:(Y) atomically:YES encoding:NSUTF8StringEncoding error:nil]
#define DRK_WRITEDICTOFILE(X,Y)     [(X) writeToFile:(Y) atomically:YES]
#define DRK_WRITEARRTOFILE(X,Y)     [(X) writeToFile:(Y) atomically:YES]  

现在,当我尝试使用它们时(就像我使用ARC时那样),像这样,我一直收到警告:

// Type specifier missing, defaults to 'int'
DRK_INIT();

- (void)someFunction:(NSString*)str
{
    // Implicit conversion of 'int' to 'NSString *' is disallowed with ARC
    [self setContent:DRK_STRFROMFILE(str)];
}

任何想法是怎么回事?如何消除所有这些 - 实际上是无害的 - 警告/错误?


提示:

  • 请注意,整个过程已经并且仍然有效,但在转换为ARC后,它会一直显示多个警告/错误。
  • 我正在运行Xcode 4.5.1,Mac OS X 10.7.5(Lion)并使用LLVM 4.1进行编译

1 个答案:

答案 0 :(得分:3)

请注意,您对DRK_INIT的定义需要参数,但您没有提供参数。

你也有一个';'在DRK_INIT()调用结束时,它将在任何方法定义之外结束。

不要试图猜测发生了什么

使用XCode中的Preprocess选项查看实际生成的内容。