iOS7 Development step by step – Objective-C & XCode 5
最近变懒了,刚好这个周末没事,恰巧又看到了Standford iOS7的公开课程,就换成iOS7来继续写这个系列吧。
Objective-C Foundation
1. Objective-C中的方法声明
下面的代码声明了一个带两个参数的方法:
- (void)addCard:(Card *)card atTop:(BOOL)atTop;
Objective-C中的方法声明与大多数语言都不相同,这种方式初看起来会比较不习惯(如果你是从其它语言转过来的)。但是细看后就会觉得这种方式可读性非常高。上面的方法全名其实可以叫做:
addCard XXX atTop XXX,读起来是不是很像自然语言?
当然我们也可以声明不带参数,或者有返回值的方法:
- (BOOL)match:(Card *)card;
- (Card *)drawRandomCard;
2. NSMutableArray
Objective-C 中的Array类型,NSArray和NSMutableArray,下面的代码声明了一个叫作cards的NSMutableArray.在Objective-C中Array声明时是不能指定Array中内容的类型的(因为Array中可以有不同类型的Object,给力哇)。NSArray和NSMutableArray的区别在于,NSArray在声明赋值以后就不能对其进行修改了,而NSMutableArray则可以对其进行修改如增加、删除其中的内容。
@property (strong,nonatomic) NSMutableArray *cards;// of Card
3. Objective-C中的消息
Objective-C中的消息分两种,一种是中括号括起来的,如下面代码中的第一行,就调用了Card的类方法alloc分配内存,然后再调用init方法实例化Card
另外一种是使用’.'来发送消息,其实是使用的Property,如下面代码中的第二行。card.rank就可以获取card的rank属性。而且,实际上这种使用’.'的方式其实只是一个语法糖,我们其实可以使用[card rank]来获取card的rank属性。(甚至,对于那些没有参数的方法,我们也可以使用XXX.methodwithnoarguemnt这样的方式来调用,当然我们并不推荐这样做,方法和属性必需要合理的使用)
Card *card = [[Card alloc]init];
card.rank;
老美的课程,讲得太详细的,好多没有记录,大家可以上网易公开课或者iTunes U看看视频:)
XCode 5 Usage
XCode 5的使用,这里也不细说(讲的太多太详细了~)
1. Action in XCode 5
前面一结的MVC介绍中有讲到过View与Controller之间的通信:
在程序运行的过程中,View层其实是需要与Controller通信的,比如用户点击了OK这个Button,View就需要告诉Controller“Hi,用户点击了OK这个Button,我该怎么办?” .当然View层不可能直接调用Controller的某个方法来处理用户点击这个事件,因为View不知道该使用Controller中的哪个方法。
因此我们使用到一种叫做Target的方式来解决这个问题,Controller会事先告诉View,“Hey,如果有人点击了OK,你就叫我运行okButtonClicked()这个方法吧。”。这下问题就解决了,有人点击了OK以后,View就会把这个动作转给Target(即Controller事先告诉View的那个方法)。然后Controller运行完该方法,处理好这个事件以后就会告诉View,好了,我知道了,你该这样,如此,这般的显示就好了。
Action 就是XCode中View与Controller之间通信的一种方式。创建一个Action十分简单,从StoryBoard中按住Ctrl键然后在View上拖动到Controller代码中就可以。
2. Outlet in XCode 5
还有一种情况就是Controller需要与View通信,或者修改View的属性的情况。
这时我们会需要创建一个outlet到Controller中。其实就是相当于在Controller中创建了一个到这个View的弱引用,当需要修改这个View的属性时,直接通过这个引用就可以对View进行操作。
至于为什么使用弱引用,课程中也有介绍:StoryBoard已经Hold住了这个View的Strong ref了,我们在Controller中只需要拿到弱引用。当StoryBoard不再有这个View时,我们也没有必要再对这个View进行操作了。
第二课内容并不太多,也不好描述,就写到这里吧,欢迎大家讨论
本人菜鸟,边听着没有字幕的Stanford公开课边写下这些东西。各位看官请轻拍,有任何建议欢迎评论。欢迎访问我的个人页面:http://1.pingoflove.sinaapp.com/?p=44