LLVM4

1.由标量直接创建NSNumber

  NSNumber *myNumber = [NSNumber numberWithInt:3];

  NSNumber *yesValue = [NSNumber numberWithBOOL:YES];

  有了LLVM4,简化为:

  NSNumber *myNumber = @3

  NSNumber *yesValue = @YES;

注意不要加双引号,@3会转换为NSNumber对象,而@"3"会转换成NSString。默认情况下,数字标量被当做有符号整型,小数标量被当做double类型。如下面代码所示,可以通过添加F后最来告诉编译器将标量转为float类型(而不是double类型),通过添加后缀U来将标量转换为无符号整型(而不是有符号整型)。类似,L和LL后缀分别表示long和long long类型。

  NSNumber *valueOfPi = @3.14F; //使用float字面量声明一个NSNumber对象

  NSNumber *radius = @3U; //使用无符号integer字面量声明一个NSNumber对象

在Objective-C++中,可以使用@true和@false来声明布尔类型true和false。

2.集合字面量(NSArray和NSDictionary)

  1)使用字面量创建字符串数组

    NSString *str1 = @"Hello";

    NSString *str2 = @"world";

    NSString *str3 = @"!";

    NSArray *myArray1 = [NSArray arrayWithObjects:str1,str2,str3,nil];//用旧方法创建一个新数组    

    NSArray *myArray2 =@[str1,str2,str3];//使用集合字面量创建一个新数组

  使用字面量不必再用nil标示数组末尾,编译器自动完成这一任务

  结合使用创建一个NSNumber数组:NSArray *arrayOfIntegers =@[@1,@2,@3,@4,@5];

  2)创建字面量字典(测试了一下好像不行)

    NSDictionary *dictionary = @[@"key1":@"value1",

                @"key2:@"value2",

                @"key3":@"value3"];

    再次强调,这里面的任何一个元素都不可以是nil。

  3)通过下标访问数组元素

    NSArray *array = @[@1,@2,@3,@4,@5];

         NSNumber *elmentAt3 = array[3];

         int element = [elmentAt3 intValue];

  4)通过下标访问字典元素(测试了一下好像不行)

NSDictionary *dictionary = @[@"key1":@"value1",

                @"key2:@"value2",

                @"key3":@"value3"];

 

  int elementAt3 = dictionary[@"key3"];

 

  5)判断字变量宏

#if __has_feature(objc_array_literals)

    //使用LLVM 4 字变量的代码

#else

    //不使用LLVM 4 字变量的回退代码

#endif

 

//检查字典字变量是否可用

  #if __has_feature(objc_dictionary_literals)

     #endif

 

//检查下标访问是否可用

#if __has_feature(objc_subscripting)

 #endif

 3.LLVM4自动合成属性,可以不在实现文件中写@synthesize了。LLVM4自动合成的实例变量以下划线_开头。如果写了@synthesize,且未定义实例变量,则合成的实例变量和属性同名。

@property(assign,nonatomic) int currentSegment;

另外本人发现,块也可以写成属性

@property(copy,nonatomic) void (^comletionHandler)();

注意(书上说的,未考证):LLVM4自动合成的实例变量在某些情况下(比如延时读写的实例变量)可能会带来麻烦。在这些情况下,应该通过添加下划线前缀的方式显示合成实例变量。只读属性也会存在类似的问题,为只读属性合成实例变量时使用双下划线__作为前缀,这样就可以避免某些运行时KVC方法对只读属性进行写操作。

posted @ 2013-05-29 17:57  gagag  阅读(393)  评论(0编辑  收藏  举报