话说在 Objective-C 里声明指针变量时,星号(*) 该放到哪个位置,是紧贴变量类型,紧贴变量名还是放它们之间两边用空格,或者全挤在一起?到底还是在思考 C/C++ 中指针变量的声明风格,因为 Objective-C 是 C 的超集。
纯粹讲 Objective-C 的代码风格,我觉得 Google 的 非常有指导意义。转回来看 Objective-C 声明指针变量时什么风格好些,下面四种都符合语法:
1 2 3 4 5 | NSString * name1 = @"Unmi"; //1. * 与变量类型与变量名之间都有空格 NSString* name2 = @"Unmi"; //2. * 紧挨变量类型,我推荐这种 NSString*name3 = @"Unmi"; //3. * 紧挨变量名 NSString*name4 = @"Unmi"; //4. * 变量类型、*、变量名紧挨在一起 NSLog(@"%@, %@, %@, %@", name1, name2, name3, name4); |
我为什么会对指针变量的声明想那么多呢,来说说我的理解:
第二种写法,即 NSString* name2; 可以很直观的理解为变量类型就是 NSString* 这么一个指针类型,变量名为 name2,这于我们普通变量的声明方式是吻合的,因为接下来使用变量也是不用带 * 的 name2,而不是使用 *name2。这很好理解,就如 BOOL flag = YES; flag = NO; 一样自然。
而且类型与*号一体表示类型还体现在参数或方法的返回型或是强制转型的情况,那是没理由把 * 号与类型拆分开的,如
- (NSString*) foo : (NSString*) param;
NSString* name = (NSSting*) anyType;第三种写法该如何理解呢?*号标记在变量名上,类型应该说是 NSString 的指针类型,反正我是觉得不好理解,不够自然。而唯一能说得通这么写的理由是在一行中声明多个指针变量时:
1 2 3 4 5 6 7 8 9 | NSString*name1, *name2, *name3, *name4;//它们全是指针类型 name1 = name2 = name3 = name4 = @"Unmi";//赋值 //不能用下面的方式,下面的 NSString 后的 * 只管到第一个,name1 //而后面的 name2, name3, name4 只认为是 NSString 类型 //NSString* name1, name2, name3, name4; //这样的话只有 name1 是指针类型 NSLog(@"%@, %@, %@, %@", name1, name2, name3, name4); |
你呢?也许本身就无足轻重!