objective-c - 宏和 ARC 的奇怪问题

标签 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 进行编译

最佳答案

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

您还有一个“;”在 DRK_INIT() 调用结束时,这将在任何方法定义之外结束。

不要试图事后猜测发生了什么

使用 XCode 中的“预处理”选项来查看您实际生成的内容。

关于objective-c - 宏和 ARC 的奇怪问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14978834/

相关文章:

ios - 从委托(delegate)返回具有 GCD 的线程

ios - 在添加新值之前如何检查数组是否具有相同的对象值

iphone - 解析 RSS 提要 - 检索图像、URL?

c - C中的许多包装函数

ios - #if 和 #ifdef Objective-C 预处理器宏有什么区别?

objective-c - 存档的应用程序不工作。从 XCODE 运行成功

objective-c - 如何使用 Dart ffi 表示具有 int 和字符串声明的 ObjC 枚举 AVAudioSessionPortOverride?

xcode - 初始化 cocoa IB 绑定(bind)

objective-c - 在 Cocoa 中保存 Webarchive 而不使用图像

C宏扩展成多个函数调用