我正在开发iOS应用程序,然后我意识到在将C块分配给具有不兼容签名的typedeffed块指针类型时,我发生了严重错误。
这是一个奇怪的部分:它没有给出任何错误或警告,编译和运行完美。
这是我的typedef:
typedef void (^ULAction)();
任何ULAction
对象都应该是不带参数的C块,并且不返回任何值。我已经忘记了签名,并且在我的应用程序的某些时候,我错误地做了很多这样的任务:
ULAction preAction = ^(id result){
//just some code that uses the variable 'result'
[[NSNotificationCenter defaultCenter] ...];
};
C块的签名和类型不匹配,但代码运行完美。我没有收到任何警告或错误。变量result
使用,有效,并且不会以任何方式崩溃。它只是有效。
我想知道为什么会这样。
答案 0 :(得分:4)
空参数列表表示您可以传递任意数量的参数。
如果您将块定义为:
,我认为情况会有所不同typedef void (^ULAction)(void);
// ^^^^