【发布时间】:2015-03-24 10:09:25
【问题描述】:
我对一种语法感到困惑,只是想知道以下两种语法之间的区别。
#define objKeys @[@"key1",@"key2",@"key3"]
#define dicWithValue1(val1,val2,val3) [NSMutableDictionary dictionaryWithObjects:@[val1,val2,val3] forKeys:objKeys]
#define dicWithValue2(objArray) [NSMutableDictionary dictionaryWithObjects:objArray forKeys:objKeys]
-(void)someFunction
{
NSMutableArray *arrValues = [[NSMutableArray alloc] init];
[arrValues addObject:dicWithValue1(@"val1",@"val2",@"val3")]; // STATEMENT 1
[arrValues addObject:dicWithValue1(@[@"val1",@"val2",@"val3"])]; // STATEMENT 2
// Below Statements will give error... for Multiple Arguments..
[arrValues addObject:dicWithValue2(@"val1",@"val2",@"val3")]; // STATEMENT 3
[arrValues addObject:dicWithValue2(@[@"val1",@"val2",@"val3"])]; // STATEMENT 4
}
问题 1:语句 2 会在运行时使应用程序崩溃,但在编译时没有给出任何错误。那么,Statement 1 和 Statement 2 有什么区别呢?
问题 2:我们如何在 #define 函数中传递数组对象,作为语句 3 和 4 给出多个参数的编译错误。
【问题讨论】:
标签: ios objective-c syntax c-preprocessor