Xcode4.4(LLVM4.0编译器)中NSArray, NSDictionary, NSNumber优化写法

  从xcode4.4开始,LLVM4.0编译器为Objective-C添加一些新的特性。创建数组NSArray,字典NSDictionary, 数值对象NSNumber时,可以像NSString的初始化一样简单方便。妈妈再也不担心程序写得手发酸了。

   A.   NSArray

  首先是非常常用的NSArray,NSMutableArray。NSArray是一个初始化后就固定的静态数组。如果想对数组的元素进行插入,删除,更新等操作,就得使用Objective-C 的动态数组NSMutableArray。

  在LLVM4.0之前,NSArray的初始化方法如下。注: 以下的方法在LLVM4.0之后也可以继续使用。

  1.NSArray的初始化赋值  

  //LLVM4.0之前

  NSArray *oldOne = [NSArray arrayWithObjects:@"1st", @"2nd", @"3th", nil];

  //在LLVM4.0之后

  NSArray *newOne =@[@"1st", @"2nd", @"3th”];

  2.获取NSArray的某个值

  //LLVM4.0之前

  NSString *s = [oldOne objectAtIndex:1];

  //在LLVM4.0之后

  NSString *s = newOne[1];

  3. NSMutableArray 更新/替换某个元素

  //LLVM4.0之前  

  [mutable replaceObjectAtIndex:1 withObject:@"disposed"]; //更新某个元素

  在编写一些常用算法时,下面的特性导致编写起来有一点麻烦。

  /*想更新NSMutableArray的某个元素?请先初始化这个元素*/

  NSMutableArray *oldMutable = [[NSMutableArray alloc] init]];

  /*必须如下给每个元素赋一个初值,否则exception会发生

  for (int h = 0; h < 5; h++) {

  [oldMutable addObject:@"1"];

  }

  @try{

  [mutable replaceObjectAtIndex:1 withObject:@"disposed"];

  }

  @catch(NSException *exception){

  NSLog(@“%@“, [exception description]);

  }

  //LLVM4.0之后

  NSMutableArray *newMutable = [NSMutableArray alloc] init];

  newMutable[2] = @"myObject";

  

  关于NSDictionary和NSNumber的变化如下, 就不细说啦。

  B. NSDictionary

  1.NSDictionary的初始化赋值

  一般性的写法:

  dict = [NSDictionary dictionaryWithObjects:@[o1, o2, o3]

  forKeys:@[k1, k2, k3]];

  LLVM4.0之前后:

  dict = @{ k1 : o1, k2 : o2, k3 : o3 };

  如:dict = @{ @"a" : @100,  @"b": @200,  @"c" :@300 };

  2.获取NSDictionary中某个键对应的值

  NSNumber *num = dict[@"b"];

  C. NSNumber

  1. 一般性的写法:

  NSNumber *number;

  number = [NSNumber numberWithChar:'X'];

  number = [NSNumber numberWithInt:12345];

  number = [NSNumber numberWithUnsignedLong:12345ul];

  number = [NSNumber numberWithLongLong:12345ll];

  number = [NSNumber numberWithFloat:123.45f];

  number = [NSNumber numberWithDouble:123.45];

  number = [NSNumber numberWithBool:YES];

  2. LLVM4.0之前后:

  NSNumber *number;

  number = @'X';

  number = @12345;

  number = @12345ul;

  number = @12345ll;

  number = @123.45f;

  number = @123.45;

  number = @YES;

Xcode4.4(LLVM4.0编译器)中NSArray, NSDictionary, NSNumber优化写法的更多相关文章

  1. Objective-C中关于NSArray, NSDictionary, NSNumber等写法的进化

    从xcode4.4开始,LLVM4.0编译器为Objective-C添加一些新的特性.创建数组NSArray,哈希表NSDictionary, 数值对象NSNumber时,可以像NSString的初始 ...

  2. express 3.0.x 中默认不支持layout.ejs的解决方法

    1.第一种方法用include 用<% include 模板名(可不加.ejs) %>的写法,具体如下 <% include header %> //套用布局拆成两部分 hea ...

  3. 在MFC中使用GDI+的一般方法,以VC6.0编译器为例

    1.载解压GDI+开发包: 2.正确设置include & lib 目录: 设置如下:VC6.0编译器菜单Tools->Options->Directories中添加inlude ...

  4. oc/object-c/ios哪种遍历NSArray/NSDictionary方式快?测试报告

    做app的时候,总免不了要多次遍历数组或者字典.究竟哪种遍历方式比较快呢?我做了如下测试:首先定义测试用宏: ? 1 2 3 4 5 6 7 8 9 #define MULogTimeinterval ...

  5. OC学习篇之---Foundation框架中的NSDictionary类以及NSMutableDictionary类

    今天来看一下Foundation框架中的NSDictionary类,NSMutableDictionary类,这个和Java中的Map类很想,OC中叫字典,Java中叫Map,还有字典是无序的,这个和 ...

  6. PL/0编译器实践---后记

    花了几天时间,把清华版的<编译原理>一书中的PL/0编译器实践了一遍.颇有收获,记录如下: 理解代码的技巧,如何理解一份代码,比如这个程序,其逻辑相对于一般程序就比较复杂了,如何翻译,虚拟 ...

  7. [转]一些NSArray,NSDictionary,NSSet相关的算法知识

    iOS编程当中的几个集合类:NSArray,NSDictionary,NSSet以及对应的Mutable版本,应该所有人都用过.只是简单使用的话,相信没人会用错,但要做到高效(时间复杂度)精确(业务准 ...

  8. PL/0编译器(java version)–Praser.java

    1: package compiler; 2:   3: import java.io.IOException; 4: import java.util.BitSet; 5:   6: /** 7: ...

  9. Read and Write NSArray, NSDictionary and NSSet to a File

    查询地址:http://iosdevelopertips.com/data-file-management/read-and-write-nsarray-nsdictionary-and-nsset- ...

随机推荐

  1. MD5加密+加盐

    了解: MD5加密,是属于不可逆的.我们知道正常使用MD5加密技术,同一字符,加密后的16进制数是不变的,自从出现彩虹表,对于公司内部员工来说,可以反查数据,获取不可能的权限,所以出现了salt算法. ...

  2. python文件操作各种模式和常用方法总结r r+ rb r+b

    1.读,r r+ rb r+b read() 全部读取 read(n) 读取一部分 r模式下:n 个字符. rb模式下:n个 字节. readline() 按行读取. readlines() 返回个列 ...

  3. apply()方法和call()方法

    obj.func.call(obj1)       //是将obj1看做obj,调用func方法,将第一个参数看做函数调用的对象,可以看做,将obj的方法给obj1使用 ECMAScript规范给所有 ...

  4. bzoj2119 [ZJOI2010]base基站选址

    传送门 n年前的考试题,今天才填上…… 听说你们会决策单调性+主席树?然而我多年不写决策单调性,懒得写了……于是就写了一发线段树. 其实线段树应该不难想,毕竟转移是分层转移,并且这个题的转移函数可以快 ...

  5. Python-常用模块1

    今天我们来看一看python中的常用的模块,内容有点多,我会分两天来更新这些知识 一.什么是模块 模块就是我们把装有特定功能的代码就行归类的结果,从代码编写的单位来看我们的程序,从小到大的顺序:一条代 ...

  6. ioc autofac简单示例

    1.winform用法: nuget安装autofac public interface ILog { bool Log(string msg); } public class TXTLogger : ...

  7. webservice使用EF生成的model序列化问题

    类型 xx 的成员 xxx 是接口,因此无法将其序列化. 修改.tt模板文件,添加以下标红两行 <# foreach (var navigationProperty in navigationP ...

  8. Git学习-Git配置(一)

    零.前言 Git是一个工具,就没必要把时间浪费在那些"高级"但几乎永远不会用到的命令上.一旦你真的非用不可了,到时候再自行Google或者请教专家也未迟. 如果你是一个开发人员,想 ...

  9. 安装、配置Jupyter Notebook快速入门教程

    What? Why? How? ---安装 ---启动 ---关闭 ---保存 Markdown语法 Magic关键词 转换notebook--toHTML 创建幻灯片 运行代码 What? 文字化编 ...

  10. 基于bootstrap的手机界面tab样式调整

    这是调整后手机页面的样子(pc端的样式还是bootstrap原来的样式,没有改变的): html结构为: <div class="tab" role="tabpan ...