微前端架构如何改变企业的开发模式与效率提升
693
2022-08-26
Xcode 4.4中LLVM compiler 4.0带来的Objective-C新语法特性
今年WWDC 2012苹果全球开发者大会上,苹果针对LLVM编译器都做了重大改进,新版的Xcode 4.4中的LLVM编译器升级到了4.0,给Objective-C带来了很多令人惊喜的特性。
注意,下面的语法需要-Xcode 4.4。
1、枚举类型的改变
老写法:
[cpp] view plain copy 1. typedef enum Week{2. Moday,3. Tuesday,4. Wednesday,5. Thursday,6. Friday,7. Saturday,8. Sunday9. }Week;
老方法的问题是枚举值的数据范围是模糊的,这个数值可能非常大,可能是负数,无法界定
新写法:
[cpp] view plain copy 1. typedef enum Week:NSUInteger{2. Moday,3. Tuesday,4. Wednesday,5. Thursday,6. Friday,7. Saturday,8. Sunday9. }Week;
新方法在列出枚举内容的同时绑定了枚举数据类型NSUInteger,这样带来的好处是增强的类型检查和更好的代码可读性。
2、使用的方法代码放置的位置顺序无关
比如:
[cpp] view plain copy 1. @interface MyClass : NSObject2. -(void)doSomething:(NSString *) print;3. @end
实现:
[cpp] view plain copy 1. @implementation MyClass2. -(void)doSomething:(NSString *)print{3. "%@", [print stringByAppendingFormat:[self getString]]);4. }5. -(NSString *)getString{6. return@"string for something";7. }8. @end
早期编译器编译时会出现:warning: instance method ‘-getString:’ not found…
新的编译器会先扫描代码中的方法,然后再编译,这样就避免了找不到方法这种情况了
3、property属性简化
比如说,我在.h文件中写了
@property (strong, nonatomic) NSDictionary *order;
我还要去对于的.m文件中写上
@synthesize order;
是不是感觉很多余啊?现在在语法新特性中不用写这行代码了,新版的编译器帮你实现这行代码,这叫帮人帮到底。
4、语法的简化
做过java 或C#开发的都知道,初始化或赋值一个变量一般用一个“=”号就搞定了,到了Objective-C后,每次都要用一个很长的函数才能赋值活初始化。现在简化多了。
咱们看看各个数据类型简化前后的对比。
4.1、NSNumber 类型
老写法:
[cpp] view plain copy 1. NSNumber *number;2. number = [NSNumber numberWithChar:'X'];3. number = [NSNumber numberWithInt:12345];4. number = [NSNumber numberWithUnsignedLong:12345ul];5. number = [NSNumber numberWithLongLong:12345ll];6. number = [NSNumber numberWithFloat:123.45f];7. number = [NSNumber numberWithDouble:123.45];8. number = [NSNumber numberWithBool:YES];
新写法:
[cpp] view plain copy 1. NSNumber *number;2. number = @'X';3. number = @12345;4. number = @12345ul;5. number = @12345ll;6. number = @123.45f;7. number = @123.45;8. number = @YES;
4.2、NSArray类型
老写法:
[cpp] view plain copy 1. NSArray *array;2. array = [NSArray arrayWithObjects:@"object1", @"object2", @"object3", nil];
新写法:
[cpp] view plain copy 1. NSArray *array = @[ @"object1", @"object2", @"object3" ];
新的写法去掉了后面讨厌的nil。
4.3、NSDictionary类型
老写法
[cpp] view plain copy 1. NSDictionary *dict = [NSDictionary dictionaryWithObjects:@[@"value1", @"value2", @"value3"]2. "key1", @"key2", @"key3"]];
新写法
[cpp] view plain copy 1. NSDictionary *dict = @{@"key1": @"value1",@"key2": @"value2",@"key3": @"value3" };2. NSLog(@"%@", dict);
运行结果正常:
{ key1 = value1; key2 = value2; key3 = value3;}
5、快速通过下标定位对象
他们说新的语法这样是可以的,数组和字典都可以通过下标访问,
[cpp] view plain copy 1. NSArray *array =@[ @"object1", @"object2", @"object3" ];2. 3. id obj = array[0]; //通过下标方式获取数组对象,替换原有写法:array objectAtIndex:i];4. NSString *obj1 = @"oooo";5. array[0] = obj1; //也可以直接为数组对象赋值。替换原有写法:[array replaceObjectAtIndex:i withObject:newObj];6. 7. NSDictionary *dict = @{@"key1": @"value1",@"key2": @"value2",@"key3": @"value3" };8. id obj2 = dict[@"key1"];//获取o2对象,替换原有写法:[dic objectForKey:k2];9. dict[@"key2"] = obj; //重新为键为k2的对象赋值,替换原有写法:[dic setObject:newObj forKey:k2]
可是事实是这样的:
现实总是残忍的。于是google 了一下,发现这个语法是针对iOS 6 or OS X 10.8 SDKs的,我没有ios 6模拟器而已没有10.8 SDKs。所以报错了。可以参考这里:2012视频的一些关于新语法特性的截图:
截图可以给你解释,新的语法特性编译器是怎么实现的。
版权声明:本文内容由网络用户投稿,版权归原作者所有,本站不拥有其著作权,亦不承担相应法律责任。如果您发现本站中有涉嫌抄袭或描述失实的内容,请联系我们jiasou666@gmail.com 处理,核实后本网站将在24小时内删除侵权内容。
发表评论
暂时没有评论,来抢沙发吧~