《斯坦福大学公开课:iOS 7应用开发》(第一课)
在学习本课程前你需要:
1.面向对象编程概念
2.较多的编程经验
iOS四层体系:
1.cocoa touch
2.media
3.core services
4.core OS
学习的东西:
1.工具:Xcode instruments
2.语言:objective-c
3.框架:最重要的两个是foundation和UIKit,其他的还有core data,mapkit,core motion等
4.设计策略:M(model)V(view)C(controller)模式--将应用所有的类有效的组织起来的策略。
下面引用网上的一段博客,其对mvc模式的理解比较到位。
首先图中绿色的箭头表示直接引用。直接引用直观来说,就是说需要包含引用类的申明头文件和类的实例变量。可以看到,只有Controller中,有对Model和View的直接引用。其中对View的直接引用体现为IBOutlet。然后我们看View是怎么向Controller通讯的。对于这个,iOS中有3种常见的模式:设置View对应的Action Target。如设置UIButton的Touch up inside的Action Target。设置View的delegate,如UIAlertViewDelegate, UIActionSheetDelegate等。设置View的data source, 如UITableViewDataSource。 通过这3种模式,View达到了既能向Controller通讯,又不需要知道具体的Controller是谁是目的,这样就和Controller解耦了。最后我们看Model。Model在图上有一个信号塔类似的图形,旁边写着Notification & KVO。这表明Model主要是通过Notification和KVO来和Controller通讯的。关于Notification,我写了一个模版代码片段如下:
// 监听通知
[[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(<#methodName#>) name:kLoginNotification object:nil];
// 取消监听
[[NSNotificationCenter defaultCenter] removeObserver:self];
// 发送通知
NSDictionary * userInfo = [NSDictionary dictionaryWithObject:[NSNumber numberWithInt:200] forKey:@"code"];
[[NSNotificationCenter defaultCenter] postNotificationName:<#notification_name#> object:self userInfo:userInfo];
所以,对于初学者,要正确地使用MVC模式还是挺难的,回想我们以前做公司某产品iphone版的时候,就有一些Model层直接依赖了Controller层,比如Model层更新数据失败了,直接调用Controller层显示出一个失败的提示界面。这样层次划分不清,造成我们做ipad版的时候很痛苦。最后我们做了代码重构,把Model的相应改变都用Notification来完成,使得在做ipad版开发时轻松了很多。
在讲完这些基础概念后,第一节课最后的时候白老头演示了一下property是如何使用的。
这也是OC与其他面向对象语言区别较大的一部分,需要理解使用proper与实例变量的区别与联系,分别有什么优势和劣势。