【发布时间】:2013-06-15 10:40:22
【问题描述】:
在这段代码中
id (^block)(void) = ^(void) {
return nil;
};
我有这个错误
使用“void *(^)(void)”类型的表达式初始化“id (^__strong)(void)”的不兼容块指针类型
所以我必须明确地将nil 转换为id 类型
id (^block)(void) = ^(void) {
return (id)nil;
};
让编译器满意。购买为什么nil不是id类型?
对于这段代码
__typeof__(nil) dummy;
dummy = [NSObject new];
Objective-C 指针类型“NSObject *”到 C 指针类型“typeof (((void *)0))”(又名“void *”)的隐式转换需要桥接转换
也就是说nil 是(void *)0,但不只是与NULL 相同?我虽然nil 应该是(id)0 而Nil 应该是(Class)0?
我使用的是 Xcode 4.6.2
编译器:Apple LLVM 版本 4.2 (clang-425.0.28)(基于 LLVM 3.2svn)
【问题讨论】:
-
您可以通过在
#import语句下的前缀标题中添加以下内容来解决此问题:#undef nil #undef Nil #define nil ((id)(NULL)) #define Nil ((Class)(NULL))
标签: objective-c objective-c-blocks null