仓酷云

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

[学习教程] IOS设计从Objective-C到Swift仓酷云

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

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

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

x
管理你的ViewController的层次可以自己写View切换的动画关掉他默认的动画文档:还有个蛋疼的UIWindow都快忘了他了因为iOS是从MacosX过来的很多工具直接拿来用这个UIWindow就是在iOS里每个App独占屏幕所以同时存在的只有一个UIWindow2014年WWDC年夜会,苹果在毫无前兆的情形下,公布了Swift编程言语。这个言语刚公布就引发了普遍存眷。我以为抛开Objective-C独自议论Swift是禁绝确的。因而我们先从Objective-C谈起。
Objective-C言语

Objective-C言语是编写iOS/Mac程序的次要言语。编写iOS/Mac程序,除Objective-C,还能够夹杂利用C/C++,别的也能够嵌进一些剧本言语。但在UI部分,利用Objective-C最为间接天然。
Objective-C和C++都是C言语的扩大。C++十多年前就已名满世界,而Objective-C固然也出生了二十多年,但在iPhone公布之前,一向不温不火。
这两种言语都撑持面向对象,计划理念却非常分歧。C++的面向对象部分更夸大范例,必要晓得对象的范例才干挪用对象的函数。而Objective-C则更夸大动静的发送。别的,C++很垂青运转速率,运转时基础不包括范例信息,全部运转情况是静态的。而Objective-C则就义了一点运转速率,换来加倍天真、完整静态的运转时情况。
Objective-C的弱点

初学iOS开辟,第一个门坎就是Objective-C的语法,它的语法跟支流的言语非常分歧。有些人乃至以为它的语法丑恶得没法忍耐。别的,Objective-C的代码看起来对照隆H缤桓鋈耍雌鹄垂止值模惶先海煜ぶ笥窒缘锰脒丁
Objective-C短少一些言语的回护机制,成员函数不辨别私有公有,且没有定名空间。模块与模块之间必要加前缀来辨别,好比Foundation模块类后面都加上NS前缀,暗示NextStep。
Objective-C兼容C言语。因而C言语良多计划分歧理的中央也被引进了Objective-C中。别的,Objective-C没有接纳GC(渣滓接纳),它的内存办理接纳援用计数的体例,前期引进ARC(主动援用计数),这类内存办理体例比拟GC而言,对程序员的请求较高。
固然,Objective-C也有良多长处。乃至能够说Objective-C的某些弱点,从另外一角度看,恰好是它的长处。
Objective-C的长处



  • 静态运转情况,合适UI编程
在Objective-C中,以下语法并不是纯真的函数挪用,而是向某对象发送动静。

<br>
Objective-C的运转情况是静态的,能够在运转时判别出某对象可否呼应某种动静,而不论此对象是甚么范例。
UI程序年夜框架就是动静处置。体系承受到某种动静(如程序启动了、列表被选中了、手指在屏幕上挪动了)以后交给能够呼应这个动静的对象来处置,而不体贴这个对象究竟是甚么范例。


  • 便利与C/C++夹杂利用
Objective-C中的C扩大部分,利用标记@开首。好比@class、@interface、@"Hello,World"。而它的动静发送语法例是利用中括号而不是圆括号。
这类共同而另类的语法使得Objective-C的代码,就算跟C++代码混在一同,也很简单被辨认出来。别的,将文件扩大名修正成mm就能够在统一文件中夹杂利用Objective-C和C++。二者间接互相挪用,不必经由任何直接层。在必要大批利用C++的场所(好比游戏),这类混编特征很有效。


  • 运转速率绝对较快
Objective-C编译后是呆板原生指令,运转时情况也小而松散。它接纳援用计数的内存办理体例,并引进ARC。ARC比GC更简单引发编程毛病,但却比GC快。而在功能很主要的场所,Objective-C也很简单间接挪用C/C++代码。相对其他利用假造机、接纳GC和直接挪用C/C++的挪动平台,速率上风十分分明。
Swift和Objective-C的接洽

苹果一向在改善Objective-C,默许编译器由GCC换成了LLVM,并前后到场literal、block、ARC、Module等特征。我以为最年夜的两点改善为以下两点。


  • ARC+弱援用,实质仍是援用计数。但从人手挪用retain、release,转成编译器主动拔出代码是个质的奔腾。
  • block+GCD,block引进函数式作风的代码块,而GCD则年夜年夜简化了异步代码编写体例。
WWDC以后,我入手下手思索一个成绩,苹果为何不持续改善Objective-C,而公布Swift这门新言语呢?这个成绩只要苹果本人晓得,其别人只能推测。
大概的缘故原由有以下几个方面。


  • Swift外表看起来很复杂,语法跟盛行的C#、JavaScript、C++等言语类似,能够吸引更多的开辟者。
  • Objective-C由于必要兼容C,以是限定了它的改善。而Swift没有汗青累赘,能够自在接纳最新的言语计划研讨功效。
  • 计划者的团体档次,ChrisLattner不习气Objective-C的语法,就往计划了一个新的。固然,这是打趣话,不要太认真。
Swift固然是新言语,却交融了Objective-C的良多特征。读Swift的文档会发明,Objective-C与Swift的接洽非常亲切。Objective-C利用的良多底层手艺,被使用到Swift中。
Swift与Objective-C共用统一套运转时情况

我们编写程序,让程序运转起来,被呆板实行的代码并不是全体是由我们本人来编写的。必要同时运转良多事后写好的撑持性的代码,才干让我们本人的代码运转起来。程序并不是独自存在的,运转时处在必定的情况傍边。我总遐想到良多小蚂蚁在土壤下面爬,而我本人写的程序只是个中的一只。
Swift跟Objective-C编译出的程序代码运转在统一套运转情况下面。Swift的范例能够桥接到Objective-C的范例,反之亦然。Swift编写的代码能够挪用Objective-C编写的代码,反之也一样。
Objective-C之前堆集上去的大批类库,完成不必改写Swift就能够间接挪用。
统一个工程,能够同时利用Swift和Objective-C

Objective-C在一端,Swift在另外一端,两头经两头文件举行桥接。桥接文件包括Objective-C的头文件,编译时主动转成Swift能够辨认的情势。Swift就能够利用Objective-C的类和它的函数。
在Swift的类中,加上@objc(类名)的字样,Objective-C也能够利用Swift编写的类。但Swift跟C++的互相挪用,必要Objective-C来封装。
总的来讲,配合利用Swift和Objective-C/C++还算便利,但已不克不及将几种言语的代码,混写在统一文件。也许是由于Swfit的语法不像Objective-C那样共同,混写难以将Swift的代码辨认出来。
Swift骨子里年夜多与Objective-C一样

Objective-C呈现过的尽年夜多半观点,好比援用记数、ARC、属性、协定、接口、初始化、扩大类、定名参数、匿名函数等,在Swift中持续无效(大概只是换了个术语)。我本人将Swift当作是Objective-C的一块年夜年夜的语法糖,其别人大概有分歧感觉。
Swift年夜多半观点与Objective-C一样,也有些观点在Objective-C找不到对应,好比泛型。Swift中将那种操纵写一次就能够感化多个范例的语法叫做Generics(泛型)。
编程言语和语法

新言语出来时,总会有种声响以为言语只是工具,他们会以为主要的是头脑,而看轻工具的感化。以为编程言语是工具自己并没有年夜错,但言语并不是一般的工具,而是头脑工具,不克不及无视言语对头脑的影响。编程言语就好像数学标记,数学标记也是种头脑工具,好的数学标记会匡助利用者思索,更奇奥的是仿佛标记自己也会思索。用0~9这些阿拉伯数字举行盘算时会感应统统都很天然,仿佛数字自己在盘算,而不是人在做盘算。
只管编程言语的语法很主要,但语法面前的观点更主要。当分明语法面前的观点后,从一门言语切换到另外一门有着不异观点的言语会很简单。但语法会影响表达,实际上每门言语都能够表达任何观点。不外当某种观点在某门言语中很难表达出来时,我们就会偏向于不利用它,这类观点在那门言语的社区就难以被人熟知。
编程言语用来表达思绪,表达起来是不是天然是很主要的。最幻想的是未几很多、方才好,写起来天然,读起来更必要天然。并不是功效越多的言语越好,而是应当越能匡助思索,越简单表达思绪的言语越好。
Swift面前的观点年夜多跟Objective-C差未几。但Swift吸取了良多其他言语的语法,统一个观点,写起来比Objective-C简便很多、天然很多。从表达的角度来讲,Swift比Objective-C优异。
Swift的语法

苹果出了本很不错的语法教程来具体形貌Swift的语法。在这里,我们只挑一些成心思的点来会商。
简便

Swift的语法给人第一感到就是简便洁净。假如省略失落也不引发歧义,那标记基础上能够被省略。
我们来看上面这个例子:

<br>
Swift写起来,有点像剧本言语。这里没有呈现范例界说,有人以为它就是剧本言语,是注释实行的。而实践上Swift是真实的编译言语,经由过程范例推导,变量的范例能够断定上去。既然省略失落范例也不引发歧义,也就能够省略了。下面的例子中,传统的句末分号能够省略;轮回中的()也能够省略;轮回1是C言语中的传统写法;i作为计数变量;轮回2是轮回1的等价写法,由于基本不必体贴计数变量,因而能够间接写成“_”。
不再兼容C言语,修改Objective-C中简单堕落的中央

例子1
在C/Objective-C中,if、while、for以后的判别式其实不必要必定传进布尔范例。也能够传进整型、指针等范例,只需非0就为真,而且赋值是有反作用的。好比:

<br>
下面代码前往a的数值,如许就有大概呈现将判别:

<br>
错写成:

<br>
为制止这个成绩,有种变通写法:

<br>
这类写法被称为Yoda表达式,由于《星球年夜战》中的Yoda大家喜好利用如许奇异的倒装句子。
Swift强迫请求if、while、for前面判别式子必定必要传进布尔范例,而且赋值没有反作用。因而写成以下这类判别就会编译毛病。Yoda表达式这类变通写法再也没有需要。

<br>
例子2
仍是拿判别来讲。在C/Objective-C中,if、while、for以后的语句假设只要一行,是能够省略失落年夜括号的。好比:

<br>
当前面的人修正代码,或多人修正统一代码再兼并时,大概会在if前面间接拔出一行,如许就必定会gotofail了:

<br>
在Swift中,强迫请求if、while、for以后必定必要写年夜括号,不论是不是只要一行。如许就制止了上述成绩。
不丢脸出,Swift的语法计划使一些C/Objective-C罕见毛病不成能再呈现。
经常使用范例集成到言语内里,而非以库的情势供应

有几品种型,几近每一个项目中都利用到了,分离是:整数、浮点数、布尔型、空值;字符串;数组、字典。
对这些范例的撑持,每一个言语都有所分歧。有些老旧的言语不撑持浮点;有些言语中,布尔和空值是整数的一种;有些言语中,整数和浮点数兼并成一类,统称为Number;有些言语中,并没有字符串、字典、数组;有些言语中,字典和数组回成一类。
言语不供应的范例多半以库的情势供应。好比在C++中,言语外部并没有供应字符串、字典、数组,但这些范例却呈现在了尺度的库中。利用库的情势来供应经常使用范例,长处是削减言语本身的庞大度,别的库能够自在交换。而接纳言语间接撑持的体例,利用起来会很简便流利。Swift中的经常使用范例集成到了言语外部。数组写成:

<br>
字典写成:

<br>
这类写法在本来的Objective-C中就已呈现,如今融进到了Swift中。
别的,Swift还撑持别的两品种型:option和tuple。option暗示有值或基本无值;tuple则暗示多个值,它能够从函数中前往多个值,或一行代码互换两个值。
在C++中,这两品种型也接纳库的体例来供应。std::tie与std::tuple分离,能够到达前往多重值的效果,但显得语法乐音多、不敷便利,以是也对照罕用。
撑持多种编程泛式

将Swift分拆开,可大抵分红以下部分:基础范例、把持流、函数界说和挪用、函数式编程、面向对象、泛型。
实践上,Swift的内容包括良多,也能够说很庞大,并不是外表上看起来那样复杂。Swift从语法上间接撑持古代盛行的编程泛式,包含:布局化编程、函数式编程、面向对象、泛型。每一个部分Swift都有些闪光点,在此没法逐一陈述。
值得一提的是,我出格喜好它的函数式编程部分。接上去我们间接拿文档的一个排序例子,看看它是怎样简化编程的。
最入手下手版本,传送函数

<br>
利用闭包

<br>
推导出参数范例,参数范例省略

<br>
推导出前往范例,return省略

<br>
省略失落闭包内里变量

<br>
假设闭包是函数的最初一个范例,能够将{}提到表面

<br>
利用操纵符函数,最初版本

<br>
很好地撑持外部DSL

有一种编程作风不太好回类,就是将程序拆分红“形貌+注释”。注释部分写一次,其他中央利用形貌式的语句,而不是命令式的语句。
外部DSL,一般使用主言语的语法特征制造出一套写法来写一些形貌性的语句。这些语句组合起来就像一门新言语似的。举个从Ruby那边借过去的例子。假设盘算几小时以后的秒数,C言语中大抵会写成:

<br>
而如今Swift中界说了扩大:

<br>
因而能够写成(分离是3小时后的秒数和3小时前的秒数):

<br>
同理,也能够写成:

<br>
这类写法看起来跟本来的命令式写法完整分歧。这些语句是形貌性的,而本来的Objective-C做不到这一点。估量Swift今后会冒出大批如许作风的库。至于这类作风究竟好欠好,要看详细情形。据我所知,对照便利界说外部DSL的言语,本来有C++、Ruby、Lisp,而如今又多了Swift。
Swift的语法另有良多成心思的中央。好比属性的中get、set写法;switchcase中的形式婚配;泛型中的范例束缚等。这里纷歧一细说了。
Swift的争议

上面列出一些Swift争议性较年夜的中央:


  • 东抄西抄一些语法、年夜杂烩,没有本人的原创;
  • 没有一些private、protected之类的权限把持;
  • 没有接纳GC(渣滓接纳),却接纳ARC(主动援用计数);
  • 没有非常处置;
  • 是不是能够跳过Objective-C,间接进修Swift。
对这些争辩,我们很难作出客不雅的评价,更不成能果断地下结论。我感到Swift这门言语仍是对照成心思的(有些人写程序只是纯真为了好玩)。
这里出格提一下非常处置。以往我一向以为非常处置是很好的特征,如今以为异处置常并不是必定是好的。非常处置的成绩在于产生非常的中央与处置非常的中央分别开来,真正处置时难以搜集到充足的信息。非常也简单滥用,良多初学者的Java代码,只抛出非常而不处置,或爽性在最外层吸收一切非常,再打印出非常信息。如许也就得到了非常处置的意义。Objective-C中也有非常处置的功效,但实践上几近没有人利用。关于Swift,接纳多前往值加上option的体例来处置毛病大概会更好。

继承自相应的不可变类比如NSMutableArray继承自NSArray他们都添加了可以改变对象内容的方法比如-(void)addObject:(id)anObject添加对象-(void)removeObject:(id)anObject删除对象上面只是一个大概的总结
海妖 该用户已被删除
沙发
 楼主| 发表于 2015-1-25 23:28:31 | 只看该作者
其次学习方法和学习心态很重要,在学习当中应该保持一颗良好的心态。应该借鉴别人好的学习方法,大家互相帮助,取长补短。
变相怪杰 该用户已被删除
板凳
发表于 2015-2-4 11:15:31 | 只看该作者
从C语言入门,因为IOS开发用的是OC语言,是在C基础上的,不过也跟C不是很搭界,你可以直接学习OC语言也可以,
飘飘悠悠 该用户已被删除
地板
发表于 2015-2-9 22:19:37 | 只看该作者
在百度搜索你想要了解的类名(苹果的cocoa和cocoatouch框架的类名很有特点很容易搜到,前缀都是NS or UI),看别人写的博客详解
深爱那片海 该用户已被删除
5#
发表于 2015-2-18 09:12:37 | 只看该作者
同很多iOS开发者一样,我也是通过培训进入到iOS开发这个行业,开始没有打算培训,只准备自己学习一些计算机编程相关的知识,毕业时找一份编程相关工作(本人是信息与计算科学这个专业,是数学系)。
因胸联盟 该用户已被删除
6#
发表于 2015-3-6 02:11:48 | 只看该作者
我也从简单的状态栏适配开始,先研究了下关于状态栏的适配,特总结如下,供广大网友一起讨论交流。
分手快乐 该用户已被删除
7#
发表于 2015-3-11 08:23:49 | 只看该作者
自从苹果公司开放iOS SDK以来,大量的国内外的软件开发者将关注的目光聚集在苹果的iOS平台上。由于iPhone和iPad自一出现就给人带来了颠覆性的感觉
只想知道 该用户已被删除
8#
发表于 2015-3-18 00:17:59 | 只看该作者
AD: iPhone文件系统NSFileManager讲解是本文要介绍的内容,主要是通过iphone文件系统来学习NSFileManager的使用方法,具体内容来看本文详解。
简单生活 该用户已被删除
9#
发表于 2015-3-25 08:10:28 | 只看该作者
还有开发工具是用Xcode,是在Mac系统的,你多摸索一下就可以开发简单的应用了,建议你买一本iphone开发秘籍第二版看看,希望可以帮到你,谢谢。
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

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

GMT+8, 2024-12-22 18:19

Powered by Discuz! X3.2

© 2001-2013 Comsenz Inc.

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