仓酷云

 找回密码
 立即注册
搜索
热搜: 活动 交友 discuz
查看: 1547|回复: 19
打印 上一主题 下一主题

[学习教程] IOS设计WWDC2012:Objective-C的新特征仓酷云

[复制链接]
灵魂腐蚀 该用户已被删除
跳转到指定楼层
楼主
发表于 2015-1-18 11:43:09 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式

马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。

您需要 登录 才可以下载或查看,没有帐号?立即注册

x
父类是NSObjectUIKit里最底层的库可以响应一些触摸事件设置焦点等功能UIView父类是UIResponder所有View的父类方法太多了大部分很有用这个不赘述了接着上一篇文章说,Objective-C在盘算机编程言语中有久长的汗青,80年月初BradCox和TomLove创造了Objective-C,1988年乔布斯的Next公司取得了这门编程言语言语的受权,并开辟出了Objective-C的言语库和NEXTSTEP的开辟情况。NextStep是以Mach和BSD为基本,Objective-C是其言语和运转库。乔布斯回回苹果,NextStep成了MaxOSX的基本,Objective-C成了Apple确当家言语,如今基础上是Apple在保护Objective-C的开展。与其他面向对象言语比拟,Objective-C接纳了一个十分小的运转时库取代了假造机。
在苹果的AppStore推出之前,Objective-C一向绝对小众,可是其优异的言语特征仿佛一向在为前面的发作积储力气,当苹果平台级的使用呈现以后,Objective-C入手下手年夜放异彩,静态言语的效力和静态言语的特征失掉浩瀚程序员的喜好,这一点在TIOBE言语排行榜上体现的十分分明。2007年iPhone刚推出的时分,Objective-C在TIOBE上排名45,2011年排名第5,2012年7月排名第3,乐成超出了老牌编程言语C++,排在Objective-C后面的是典范言语C、Java。
2007年之前Objective-C小众是由于它只能开辟苹果的操纵体系和软件,厥后之以是盛行恰好也是由于这一点,这不但让人感伤这无常的人生。不外有一点是没有变,Objective-C一向是一门优异的编程言语,并且它一向在开展。从1.0到2.0,从面向对象的C言语扩大,到内存援用计数办理,属性办理,引进块的观点,完成主动援用计数等等,几近每一年城市有新特征到场,这在其他编程言语中是很少见的,这些新特征的引进也不休为开辟职员带来软件计划和研发上的便当。
不外关于编程言语之争,一向是程序员之间的一个槽点,人人没事就吐啊吐啊,你说一门言语优异,那一定有一帮人跳出来讲这门言语烂。我的概念是,编程言语的确有计划头脑、语法和效力上的好坏之分,尽量往利用那些你以为优异的言语,这会匡助你发扬本人和这门言语的潜力。用它,就往发明它的长处,把一门编程言语发扬到极限,你也就离牛人不远了。
往年2012的WWDC上,苹果针对Objective-C和LLVM编译器都做了严重改善,我们来看一看Objective-C增添了哪些新特征。

<br>
1、办法按次有关

Objective-C类由声明文件h和完成文件m构成,一切的public办法都在h文件中声明,private办法能够写在m文件中,可是在初期的编译情况中必要注重办法的按次,比方上面的代码,在初期的编译情况会给出告诫:
类和办法声明:
  1. @interfaceObjcNewFeatures:NSObject-(void)doSomething:(NSString*)text;@end
复制代码
完成:
  1. @implementationObjcNewFeatures-(void)doSomething:(NSString*)text{NSLog(@"%@",[textstringByAppendingFormat:[selfgetCode]]);}-(NSString*)getCode{return@"Unicode";}@end
复制代码
初期编译器编译时会呈现:warning:instancemethod‘-getCode:’notfound…
这是由于依据编译按次,编译器不晓得在doSomething以后另有getCode办法,以是会给出告诫。办理举措有多种,好比能够把getCode办法放到doSomething之前,也能够提早声明公有办法,以下:在m文件中增添:
  1. @interfaceObjcNewFeatures()-(NSString*)getCode;@end
复制代码
新版编译器在LLVM中增添了新特征,改动了按次编译的体例,起首扫描办法声明,然后再对实在现部分举行编译。如许不管是public仍是private办法,就变得按次有关了。今朝XCode的最新版本4.3.3接纳的默许编译器是AppleLLVMcompiler3.1,以上代码在最新的编译情况下一般运转。
2、列举范例的改善

在OSXv10.5之前,我们怎样在Objective-C中界说一个列举范例呢?以下:
  1. typedefenum{ObjectiveC,Java,Ruby,Python,Erlang}Language;
复制代码
这类写法复杂了然,用起来也不庞大,可是有一个成绩,就是其列举值的数据局限是含混的,这个数值大概十分年夜,多是正数,没法界定。
在OSXv10.5以后和iOS中,你能够如许写:
  1. enum{ObjectiveC,Java,Ruby,Python,Erlang};typedefNSUIntegerLanguage;
复制代码
这类写法的优点是,起首这个列举的数据范例是断定的,无标记整数。其次因为我们接纳了NSUInteger,能够不必思索32位和64位的成绩。带来的成绩是数据范例和列举常量没有显式的联系关系。
在XCode4.4中,你能够如许写列举了:
  1. typedefenumLanguage:NSUInteger{ObjectiveC,Java,Ruby,Python,Erlang}Language;
复制代码
在列出列举内容的同时绑定了列举数据范例NSUInteger,如许带来的优点是加强的范例反省和更好的代码可读性。
固然,关于一般开辟这来讲,列举范例大概不会触及到庞大的数据,利用之前的两种写法也不会有甚么年夜成绩。不管怎样,在XCode4.4公布以后,我们就能够实验接纳新的写法了。
3、属性分解

每一个开辟职员对property都很熟习,我们必要为类界说属性,编写getter和setter办法。那末我们在Objective-C中是怎样举行处置属性呢?很复杂,起首在h文件中界说属性:
  1. @property(strong)NSString*name;
复制代码
然后在m文件中利用@synthesize指令完成属性的accessor办法和界说实例变量ivar:
  1. @synthesizename=_name;
复制代码
@synthesize的寄义是,假如没有举行重载的情形下,编译器会依据读写属性主动为类实例变量_name天生getter和setter办法。固然,你也能够用@dynamic指令指定该属性的相干办法由开辟职员完成。
如许看起来是否是已很复杂了?可是没有最复杂只要更复杂。在XCode4.4中,我们能够省略失落@synthesizename=name;这一行,完整交给编译器往完成。也就是说在h文件中声明属性name后,就能够间接在完成文件中利用该属性的getter和setter办法,并利用实例变量name。而且编译器会依据属性的可读和可写主动判别是不是供应setter办法。
那末在这类情形下,假如你声了然@dynamic的属性,编译器该怎样处置呢?一切synthesize相干的特征将不复兴感化,你必要本人往完成属性的相干办法。
总接一上司性分解的新特征:
除非明白申明,不然属性相干的accessor办法(getter和setter)将主动天生。
除非一切的accessor办法供应实例变量,不然实例变量(比方_name)会主动天生。
假如利用了@synthesize,并没有供应气力变量名的话,会主动天生。
假如利用了@dynamic,那末主动分解有效,必要开辟者本人完成。
CoreData的NSManagedObject及其子类不利用默许的属性分解功效。
4、语法简化

良多刚从其他编程言语转到Objective-C的同砚看到长长的函数名会感应溃散,不外我在上一篇文章中也提到过,这类语法让动静的传送像一个英语句子,年夜年夜加强了可读性。好比你想初始化一个浮点数,必要这么写:
  1. NSNumbervalue=[NSNumbernumberWithFloat:123.45f];
复制代码
从这句中我们可以明白的晓得代码的寄义,可是,是不是连复杂的赋值语句也要这么处置呢?苹果在本次新特征中接纳了折衷的处置体例,针对良多基本范例接纳了简写的体例,完成语法简化。简化今后,我们会发明从语法层面,这些简化的Objective-C更像Python和Ruby等静态言语的语法了。上面我们一一先容:
NSNumber

简化前的写法:
  1. NSNumber*value;value=[NSNumbernumberWithInt:12345];value=[NSNumbernumberWithFloat:123.45f];value=[NSNumbernumberWithDouble:123.45];value=[NSNumbernumberWithBool:YES];
复制代码
简化后的写法:
  1. @implementationObjcNewFeatures-(void)doSomething:(NSString*)text{NSLog(@"%@",[textstringByAppendingFormat:[selfgetCode]]);}-(NSString*)getCode{return@"Unicode";}@end0
复制代码
装箱表达式也能够接纳相似的写法:
  1. @implementationObjcNewFeatures-(void)doSomething:(NSString*)text{NSLog(@"%@",[textstringByAppendingFormat:[selfgetCode]]);}-(NSString*)getCode{return@"Unicode";}@end1
复制代码
能够分离简写为:
  1. @implementationObjcNewFeatures-(void)doSomething:(NSString*)text{NSLog(@"%@",[textstringByAppendingFormat:[selfgetCode]]);}-(NSString*)getCode{return@"Unicode";}@end2
复制代码
关于字符串表达式来讲,必要注重的是表达式的值必定不克不及是NULL,不然会抛出非常。
NSArray

关于NSArray的初始化来讲,有十分多的写法,这里就不再逐一排列,我们间接看新的写法
  1. @implementationObjcNewFeatures-(void)doSomething:(NSString*)text{NSLog(@"%@",[textstringByAppendingFormat:[selfgetCode]]);}-(NSString*)getCode{return@"Unicode";}@end3
复制代码
十分复杂,不再用记着初始化多个对象的数组时,前面还要跟一个不利的nil。如今我们看一下当声明多对象的数组时,编译器是怎样处置的:
  1. @implementationObjcNewFeatures-(void)doSomething:(NSString*)text{NSLog(@"%@",[textstringByAppendingFormat:[selfgetCode]]);}-(NSString*)getCode{return@"Unicode";}@end4
复制代码
好吧,编译器已为我们把这些复杂反复的事情都做了,我们就能够放心办理真实的成绩了:)不外有一点要注重,假如a,b,c对象有nil的话,运转时会抛出非常,这点和本来的处置体例分歧,编码的时分要多加当心。
NSDictionary

一样,关于字典这个数据布局来讲,有良多种初始化的体例,我们来看新的写法:
  1. @implementationObjcNewFeatures-(void)doSomething:(NSString*)text{NSLog(@"%@",[textstringByAppendingFormat:[selfgetCode]]);}-(NSString*)getCode{return@"Unicode";}@end5
复制代码
最初我们总接一下容器类数据布局简化的限定:接纳上述写法构建的容器都是不成变的,假如必要天生可变容器,能够传送-mutableCopy动静。比方
  1. @implementationObjcNewFeatures-(void)doSomething:(NSString*)text{NSLog(@"%@",[textstringByAppendingFormat:[selfgetCode]]);}-(NSString*)getCode{return@"Unicode";}@end6
复制代码
不克不及对常量数组间接赋值,办理举措是在类办法(void)initialize举行赋值,以下:
  1. @implementationObjcNewFeatures-(void)doSomething:(NSString*)text{NSLog(@"%@",[textstringByAppendingFormat:[selfgetCode]]);}-(NSString*)getCode{return@"Unicode";}@end7
复制代码
没有常量字典
5、对象下标

容器的语法简化让我们不难想到,能够经由过程下标的体例存取数组和字典的数据。好比关于数组:
  1. @implementationObjcNewFeatures-(void)doSomething:(NSString*)text{NSLog(@"%@",[textstringByAppendingFormat:[selfgetCode]]);}-(NSString*)getCode{return@"Unicode";}@end8
复制代码
我们能够如许写:
  1. @implementationObjcNewFeatures-(void)doSomething:(NSString*)text{NSLog(@"%@",[textstringByAppendingFormat:[selfgetCode]]);}-(NSString*)getCode{return@"Unicode";}@end9
复制代码
关于字典:
  1. @interfaceObjcNewFeatures()-(NSString*)getCode;@end0
复制代码
我们能够如许写:
  1. @interfaceObjcNewFeatures()-(NSString*)getCode;@end1
复制代码
同时,我们本人界说的容器类,只需完成了划定的下标办法,就能够接纳下标的体例会见数据。要完成的办法以下:
数组范例的下标办法
  1. @interfaceObjcNewFeatures()-(NSString*)getCode;@end2
复制代码
个中必要注重的是indexType必需是整数,elementType和keyType必需是对象指针。
总结

关于言语的新特征此次就先容到这里,利用新版的Objective-C,你就能够取得这些新特征,编写更简便的代码,同时制止一些罕见的圈套。Onemorething,这些语法特征是完整向下兼容,利用新特征编写出来的代码,经由编译后构成的二进制程序能够运转在之前公布的任何OS中。
因为苹果公司Mac、iPhone和iPad销量的日新月异,AppStore上的使用构成了一个复杂的App帝国,这个完全的生态圈同时又无力的促进了开辟言语Objective-C的高速开展,这门言语既坚持了面向对象、动静传送和静态言语的特征,同时也在不休的做减法,语法的简化会年夜年夜提拔开辟者的效力,闪开发者的精神更多的放在创意和App的完成上。
每门言语的年夜放异彩都离不开其特定的情况泥土,一如昔时的Lisp,Smalltalk,C,C++,Java,C#,好吧,如今是——Objective-C。
相干文章:Objective-C——动静、Category和Protocol

最近一直都在学习有关ios(苹果系统)的知识,而学习ios的最好方法就是研究iPhone和ipad。因为iPhone和iPad的应用程序都是用Objective-C语言来开发的,所以在接触ios之前,我必须有一定的Objective-C基础。
精灵巫婆 该用户已被删除
沙发
发表于 2015-1-21 13:09:05 | 只看该作者
才在自己的Windows电脑上安装配置成功了一个完美的Mac OS X Lion(10.7.4)系统,而且下载了Xcode4.5的最新版本。虽然不能实机调试,但是作为iOS开发学习已经非常完美了。
蒙在股里 该用户已被删除
板凳
发表于 2015-1-22 07:37:38 来自手机 | 只看该作者
以上可以同时进行,学习过程中尽量不要纠结细节和底层,要知道ios是封闭的、OC是高级语言,我们不可能过多地去了解它的原理,至少在新手阶段没有必要。用迭代的方式更新你的知识,而不是死抠一个知识点。
分手快乐 该用户已被删除
地板
发表于 2015-1-26 20:30:58 | 只看该作者
同很多iOS开发者一样,我也是通过培训进入到iOS开发这个行业,开始没有打算培训,只准备自己学习一些计算机编程相关的知识,毕业时找一份编程相关工作(本人是信息与计算科学这个专业,是数学系)。
透明 该用户已被删除
5#
发表于 2015-2-2 14:25:06 | 只看该作者
然而,在vmware软件环境下,安装Mac OS X操作系统也是一件非常复杂的事情,而且还有可能花费了大量时间,最后却跑不起来。笔者也是经过了大量的实践,
小女巫 该用户已被删除
6#
发表于 2015-2-4 16:58:26 | 只看该作者
看完这个你就可以有多种选择来踏入做应用的阶段
山那边是海 该用户已被删除
7#
发表于 2015-2-10 04:23:18 | 只看该作者
培训的时候很痛苦,每天要待12个小时,上午讲课,下午和晚自习解决作业,看文档,学习的时候感觉就是资料太少,而且看着资料也不明所以,非常痛苦,
兰色精灵 该用户已被删除
8#
发表于 2015-2-28 19:37:42 | 只看该作者
最后在做项目的时候一定要认真对待,毕竟这个直接和你的就业挂钩,这也是锻炼你实际操作的能力。
只想知道 该用户已被删除
9#
发表于 2015-3-3 23:53:56 | 只看该作者
以上可以同时进行,学习过程中尽量不要纠结细节和底层,要知道ios是封闭的、OC是高级语言,我们不可能过多地去了解它的原理,至少在新手阶段没有必要。用迭代的方式更新你的知识,而不是死抠一个知识点。
admin 该用户已被删除
10#
发表于 2015-3-11 04:09:17 | 只看该作者
AD: iPhone文件系统NSFileManager讲解是本文要介绍的内容,主要是通过iphone文件系统来学习NSFileManager的使用方法,具体内容来看本文详解。
海妖 该用户已被删除
11#
发表于 2015-3-17 20:09:42 | 只看该作者
从C语言入门,因为IOS开发用的是OC语言,是在C基础上的,不过也跟C不是很搭界,你可以直接学习OC语言也可以,
谁可相欹 该用户已被删除
12#
发表于 2015-3-24 23:36:58 | 只看该作者
首先是基础,在汉昌的课程非常全面。从object—c到最后的毕业项目,基本上方方面面都涉及到了,我是一名非计算机专业的学生,起初学习还有点吃力,因为基础知识薄弱。经常像听天书
若天明 该用户已被删除
13#
发表于 2015-3-28 03:29:44 | 只看该作者
在百度搜索你想要了解的类名(苹果的cocoa和cocoatouch框架的类名很有特点很容易搜到,前缀都是NS or UI),看别人写的博客详解
第二个灵魂 该用户已被删除
14#
发表于 2015-4-1 22:10:56 | 只看该作者
开始的时候甚至想放弃,不过想想自己的未来,只能咬牙坚持,课下就不停的缠着老师。放学就补基础,这些基础的东西没有速成的,只有刻苦努力。我是后来发现的,转变自己的心态,不要读书看资料当成一种痛苦
飘飘悠悠 该用户已被删除
15#
发表于 2015-4-3 04:04:54 | 只看该作者
要学会通过各种方法将面前的事情变成自己感兴趣的,那专研起来就不会是无聊和折磨了。
金色的骷髅 该用户已被删除
16#
发表于 2015-4-5 05:53:19 | 只看该作者
还有开发工具是用Xcode,是在Mac系统的,你多摸索一下就可以开发简单的应用了,建议你买一本iphone开发秘籍第二版看看,希望可以帮到你,谢谢。
柔情似水 该用户已被删除
17#
发表于 2015-4-6 21:06:22 | 只看该作者
然而,在vmware软件环境下,安装Mac OS X操作系统也是一件非常复杂的事情,而且还有可能花费了大量时间,最后却跑不起来。笔者也是经过了大量的实践,
变相怪杰 该用户已被删除
18#
发表于 2015-4-12 15:02:41 | 只看该作者
看完这个你就可以有多种选择来踏入做应用的阶段
莫相离 该用户已被删除
19#
发表于 2015-4-13 07:34:40 | 只看该作者
然而,在vmware软件环境下,安装Mac OS X操作系统也是一件非常复杂的事情,而且还有可能花费了大量时间,最后却跑不起来。笔者也是经过了大量的实践,
因胸联盟 该用户已被删除
20#
发表于 2015-4-21 15:00:46 | 只看该作者
在百度搜索你想要了解的类名(苹果的cocoa和cocoatouch框架的类名很有特点很容易搜到,前缀都是NS or UI),看别人写的博客详解
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

QQ|Archiver|手机版|仓酷云 鄂ICP备14007578号-2

GMT+8, 2024-12-29 08:09

Powered by Discuz! X3.2

© 2001-2013 Comsenz Inc.

快速回复 返回顶部 返回列表