当使用Objective-C的时候,你总会遇到Foundation 框架中的一些类,这些类包含NSString,NSNumber,NSArray和NSDictionary,这些数据结构都是自解释的。
     Objective-C以简明具体的语法而著名,自从oc1.0有一个简单的方式定义一个NSString变量,我们能够这样声明一个字符串变量
NSString *someString=@“Hello Lves";
     没有这样的语法之前,我们创建一个字符串变量须要先alloc然后init。Literal(简明)语法已经在oc2.0之后扩展到了NSNumber,NSArray和NSDictionary.使用简明语法能够降低代码量和更加easy阅读。
Literal Number
     NSNumber变量能够封装一些基本类型变量,像:int,float,bool等,在未使用literal之前,或许你会这样定义
NSNumber *someNumber=[NSNumber numberWithInt:1];
     整数1被放进NSNumber中,当然有比这更好的方法,实例:
 NSNumber *intNumber=@1;
NSNumber *floatNumber=@2.5;
NSNumber *doubleNumber=@3.14159;
NSNumber *boolNumber=@YES;
NSNumber *charNumber=@'a';

简明语法也能够这样表述:

    int x=5;
float y=6.32f;
NSNumber *expressionNumber=@(x*y);
像上边那样定义而不是採用之前的语法因此使用简明语法定义NSNumber变量是十分实用的。

Literal Arrays
     数组是常常使用的类型,在2.0之前我们能够这样定义一个数组:
NSArray *animals=[NSArray arrayWithObjects:@“cat”,@“dog”,nil];

然而使用Literal语法之后,你仅仅须要这样做:

NSArray *animals=@[@“cat”,@“dog"];

对于数组还不止这些,平时操作数组获得一个指定下标下的内容我们能够使用objectAtIndex方法:

NSString *dog=[animals objectAtIndex:1];

使用letaral,你能够这样做:

 NSString *dog=animals[1];


使用简明语法的时候有一点须要注意:假设数组中有一个对象是空,它会报异常,由于literal语法实在栈上动态的创建和加入对象的,你得到的异常例如以下:

以下看以下一个样例:
    id obj1=@"wildcat";
id obj2=@"Lves Li";
id obj3=@"lele"; NSArray *arrayA=[NSArray arrayWithObjects:obj1,obj2,obj3, nil];
NSArray *arrayB=@[obj1,obj2,obj3];
假如obj2=nil;此时使用简明语法定义的数组arrayB就会报异常,而arrayA不会,可是arrayA中仅仅有一个变量obj1。由于arrayWithObjects: 方法直到遇到nil就不加入变量了而不会报异常。
这点不同说明了使用literal更加的安全。抛出异常使应用崩溃比创建一个包括比期望变量少的数组要好,报出异常意味着我们能够更easy发现问题进而解决。


Literal Dictionary

未完待续:转载请注明原文转自:http://blog.csdn.net/wildcatlele












Effective Objective-C 2.0 笔记三(Literal Syntax简写语法)的更多相关文章

  1. Oracle学习笔记三 SQL命令

    SQL简介 SQL 支持下列类别的命令: 1.数据定义语言(DDL) 2.数据操纵语言(DML) 3.事务控制语言(TCL) 4.数据控制语言(DCL)  

  2. 《CMake实践》笔记三:构建静态库(.a) 与 动态库(.so) 及 如何使用外部共享库和头文件

    <CMake实践>笔记一:PROJECT/MESSAGE/ADD_EXECUTABLE <CMake实践>笔记二:INSTALL/CMAKE_INSTALL_PREFIX &l ...

  3. 《MFC游戏开发》笔记三 游戏贴图与透明特效的实现

    本系列文章由七十一雾央编写,转载请注明出处. 313239 作者:七十一雾央 新浪微博:http://weibo.com/1689160943/profile?rightmod=1&wvr=5 ...

  4. [Firefly引擎][学习笔记三][已完结]所需模块封装

    原地址:http://www.9miao.com/question-15-54671.html 学习笔记一传送门学习笔记二传送门 学习笔记三导读:        笔记三主要就是各个模块的封装了,这里贴 ...

  5. VSTO学习笔记(三) 开发Office 2010 64位COM加载项

    原文:VSTO学习笔记(三) 开发Office 2010 64位COM加载项 一.加载项简介 Office提供了多种用于扩展Office应用程序功能的模式,常见的有: 1.Office 自动化程序(A ...

  6. Java IO学习笔记三

    Java IO学习笔记三 在整个IO包中,实际上就是分为字节流和字符流,但是除了这两个流之外,还存在了一组字节流-字符流的转换类. OutputStreamWriter:是Writer的子类,将输出的 ...

  7. 学习笔记(三)--->《Java 8编程官方参考教程(第9版).pdf》:第十章到十二章学习笔记

    回到顶部 注:本文声明事项. 本博文整理者:刘军 本博文出自于: <Java8 编程官方参考教程>一书 声明:1:转载请标注出处.本文不得作为商业活动.若有违本之,则本人不负法律责任.违法 ...

  8. 响应式编程笔记三:一个简单的HTTP服务器

    # 响应式编程笔记三:一个简单的HTTP服务器 本文我们将继续前面的学习,但将更多的注意力放在用例和编写实际能用的代码上面,而非基本的APIs学习. 我们会看到Reactive是一个有用的抽象 - 对 ...

  9. muduo网络库学习笔记(三)TimerQueue定时器队列

    目录 muduo网络库学习笔记(三)TimerQueue定时器队列 Linux中的时间函数 timerfd简单使用介绍 timerfd示例 muduo中对timerfd的封装 TimerQueue的结 ...

随机推荐

  1. eclipse导入myeclipse的web项目没法识别问题解决方法

    1.进入项目目录,找到.project文件,打开. 2.找到<natures>...</natures>代码段. 3.在第2步的代码段中加入如下标签内容并保存: <nat ...

  2. 重操JS旧业第二弹:数据类型与类型转换

    一 数据类型 1 js中的数据类型 1.1 数据类型列举 1)number类型 2)boolean类型 3)string类型 4)对象类型 5)函数类型 6)undefined类型 1.2 数据类型获 ...

  3. 融云(找到“每个App都有沟通的需求”的细分市场)

    近日,国内著名App驾考宝典和融云达成合作,为应用增加IM功能,实现亿级用户之间聊天.消息一出,IM(即时通讯)领域的大佬,同时也是个上线不到两岁的新生力量,再次引发了行业的关注. 对业内人士而言,即 ...

  4. hdu 1540 Tunnel Warfare(线段树区间统计)

    Tunnel Warfare Time Limit: 4000/2000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others) T ...

  5. Oracle判断指定列是否全部为数字

    select nvl2(translate(name,'\1234567890 ', '\'),'is   characters ','is   number ') from customer_inf ...

  6. ADOConnection数据库连接池

    unit AdoconnectPool; interface uses Classes, Windows, SysUtils, ADODB, IniFiles, forms; type TADOCon ...

  7. c#1所搭建的核心基础之委托

    本文将对c#1的委托进行详细探索 委托(delegate)   注 delegate:vt.委派代表; 授权给; [法律]债务转移;  委托作用:在恰当的时间执行一系列操作 1.简单委托的构成 声明委 ...

  8. Spring MVC Controller与jquery ajax请求处理json

    在用 spring mvc 写应用的时候发现jquery传递的[json数组对象]参数后台接收不到,多订单的处理,ajax请求: "}]}]} $.ajax({ url : url, typ ...

  9. 拍照图片滤镜sample

    本文章主要介绍拍完照片后对图片的渲染进行处理 可以对拍出的照片进行选择不同的滤镜,令在图片上附有编辑框,供大家对图片进行描述,这是一个可以手动拖动的编辑框,在这里主要介绍下,手指放到控件上什么情况下视 ...

  10. 头文件 boost/cstdint.hpp

    Header boost/cstdint.hpp 头文件 boost/cstdint.hpp  头文件 <boost/cstdint.hpp> 提供了用于编写要求指定整数宽度的可移植代码的 ...