仓酷云

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

[学习教程] IOS制作之Swift,任重而道远!仓酷云

[复制链接]
简单生活 该用户已被删除
跳转到指定楼层
楼主
发表于 2015-1-18 11:26:35 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式

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

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

x
CoreAnimation---制作动画很强大很喜欢的框架可以用少量的代码写出漂亮的动画CQuartz2D---强大的2D绘图库COpenGL---不用介绍了超级强大的3D库CCoreImage---【编者案:】在往年的WWDC2014年夜会上,苹果公司公布了Swift。Swift言语不但承继了C言语和Objective-C的特征,并且还克制了C言语的兼容性成绩,关于宽大开辟者来讲是个不错的选择。但是,原文作者Tyrone却其实不待见Swift,他在利用Swift的过程当中,发明Swift并没有设想中的优美。事实是甚么缘故原由呢?一同来看下:
译文以下:
在举行测试前,我作了以下思索:


  • 固然Swift在对数组举行排序时分取得了与C相媲美的优秀体现,可是别的方面呢?
  • 多是出于市场营销的效力,苹果给出的标签是比Objective-C快2.6倍、比Python2.7快8.4倍,真的吗?
  • 它有个幽美的名字Swift(雨燕),轻巧迅捷,但我们不克不及沉浸于表象。
我这里次要以一个Swift项目为基本,举行功能测试。以下是一个相干示例代码:

  • importFoundation

  • publicclassUser:ModelObject,UpdatableFromJSON{
  • publicvarname:String?
  • publicvarhandle:String?

  • publicrequiredinit(data:[String:AnyObject]){
  • super.init(data:data)
  • updateWithJSON(data)
  • }

  • publicoverridefuncupdateWithJSON(data:[String:AnyObject]){
  • super.updateWithJSON(data)
  • name<<<data["name"]
  • handle<<<data["handle"]
  • }
  • }
这是一个用于剖析500KB巨细JSON数据的示例,完全的示例代码请点击这里举行下载,示例处置的成绩是在1000个会话中找出用户User对应的会员身份。剖析器parser读取JSON后,创立Membership对象并指向联系关系实例User和Convo,同时依据convos键值创立(或更新)Convo对象堆。
我使用了XCTest的新特征举行了功能测试。测试代码以下所示:

  • functestUserConvosSwiftParsingPerformance(){
  • letfilePath=NSBundle(forClass:PerformanceTests.self).pathForResource("convos",ofType:"json")
  • letjsonData=NSData(contentsOfFile:filePath!)
  • varerror:NSError?
  • letjsonObject=NSJSONSerialization.JSONObjectWithData(jsonData!,options:nil,error:&error)!as[String:AnyObject]
  • self.measureBlock(){
  • letresp=ChatspryClient.UserConvosResponse(data:jsonObject)
  • }
  • }
我在编译设置中开启了-O形式,测试的设备是第五代iPodTouch,运转的体系是iOS8,利用的是与iPhone4S不异的A5双核处置器。跟着JSON数据处置量的增添,该设备的呼应愈来愈慢。
测试了局是用时1.42s,何等使人受惊的龟速。因而,我决意即刻创立一个Objective-C版原本举行对照。

  • @interfaceCSUser:CSModelObject
  • @property(nonatomic,strong)NSString*name;
  • @property(nonatomic,strong)NSString*handle;
  • @end
  • @implementationCSUser
  • -(void)updateWithJSON:(NSDictionary*)json
  • {
  • [superupdateWithJSON:json];
  • self.name=json[@"name"];
  • self.handle=json[@"handle"];
  • }
  • @end
一样地我启用了-Os。使人欣喜的是,这个版本的运转用时仅需0.09s,换而言之,它约莫比Swift快了快要15倍,而我在Swift和Object-C都已开启了LLVM优化器。
我实验对Swift的变态体现举行复杂研讨,我临时还不克不及断定这事实是Swift自己的缘故原由仍是JSONHelpder引发的。独一的办法是一行行地对比Objective-C语句和Swift语句,再写另外一个Objective-C款式的Swift,然落后行ApplesToApples的测试。这也许不是惯例的Swift写法,到处都是NSDictionary援用而不是Swift自己的函数。比方:

  • publicclassCSSwiftUser:CSSwiftModelObject{
  • publicvarname:String?
  • publicvarhandle:String?

  • publicoverridefuncupdateWithJSON(json:NSDictionary){
  • super.updateWithJSON(json)
  • name=json["name"]asString?
  • handle=json["handle"]asString?
  • }
  • }
Swift在-O下运转时会有segfaults(段毛病)的情形,为了公允起见,我把Object-C优化器封闭了,这是封闭后二者的对照:


  • Objective-C:0.06s
  • Objective-C款式的Swift:0.29s
让我较利诱的是Objective-C在封闭优化器后反而运转得更快,这个先放下,不是此次的重点。由上可见,Objective-C款式的Swift取得了可承受的功能体现,可是假如真的如许做,段毛病会不休呈现,最初招致功能下落。
出于猎奇,最初我还利用了RubyMotion以Ruby言语重写Objective-C测试。RubyMotion撑持利用Ruby来编写iOS和安卓使用,程序最初会被编译为不异的呆板码,与Swift和Objective-C历程相似。一向以来,我以为Ruby会比Objective-C慢很多,究竟这是静态和静态言语的区分。
该Ruby示例代码以下:

  • classCSUser<CSModelObject
  • attr_accessor:name,:handle

  • defupdateWithJSON(json)
  • super
  • self.name=json[:name]
  • self.handle=json[:handle]
  • end
  • end
注:RubyMotion中临时没有任何的优化设置选项。
最初的测试了局是:

<br>
可见,RubyMotion比Swift跑得更快。因而,Swift是否是真的如宣扬所说的那样技艺急迅,真的见仁见智了。不外关于我来讲,假如没有进一步的改善,我决意仍是利用Objective-C来编写iOS项目好了。
以下是笔者摘取的部分出色概念:
来自DemonicEgg的批评:

只能IB识别IB也没那么高深XIB文件解开之后就是一堆代码之前面过一家小公司看我当时写的程序里面用到了IB一脸不屑
飘飘悠悠 该用户已被删除
沙发
发表于 2015-1-22 06:51:09 | 只看该作者
才在自己的Windows电脑上安装配置成功了一个完美的Mac OS X Lion(10.7.4)系统,而且下载了Xcode4.5的最新版本。虽然不能实机调试,但是作为iOS开发学习已经非常完美了。
冷月葬花魂 该用户已被删除
板凳
发表于 2015-1-26 19:21:09 | 只看该作者
从C语言入门,因为IOS开发用的是OC语言,是在C基础上的,不过也跟C不是很搭界,你可以直接学习OC语言也可以,
海妖 该用户已被删除
地板
发表于 2015-2-1 12:06:58 | 只看该作者
down下code4app网站的每个分类的代码挨着看
愤怒的大鸟 该用户已被删除
5#
发表于 2015-2-7 04:34:49 | 只看该作者
学习ios没什么捷径,关键在于多动手敲,曾看到前辈开玩笑说怎么快速学会某技术,答案是:“提高打字速度,快点写代码就能快点学会了”。
小女巫 该用户已被删除
6#
发表于 2015-2-8 14:34:02 | 只看该作者
以上可以同时进行,学习过程中尽量不要纠结细节和底层,要知道ios是封闭的、OC是高级语言,我们不可能过多地去了解它的原理,至少在新手阶段没有必要。用迭代的方式更新你的知识,而不是死抠一个知识点。
再见西城 该用户已被删除
7#
发表于 2015-2-25 18:11:25 | 只看该作者
因为我们老师也是自学的,给我们讲课说的最多的就是百度,谷歌,查文档。
若天明 该用户已被删除
8#
发表于 2015-3-15 18:10:44 | 只看该作者
我也从简单的状态栏适配开始,先研究了下关于状态栏的适配,特总结如下,供广大网友一起讨论交流。
admin 该用户已被删除
9#
发表于 2015-3-22 02:11:45 | 只看该作者
因为我们老师也是自学的,给我们讲课说的最多的就是百度,谷歌,查文档。
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

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

GMT+8, 2024-12-23 12:11

Powered by Discuz! X3.2

© 2001-2013 Comsenz Inc.

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