你的位置:首页 > 操作系统

[操作系统](1/18)重学Standford_iOS7开发_iOS概述_课程笔记


  写在前面:上次学习课程对iOS还是一知半解,由于缺乏实践,看公开课的视频有时不能很好地领会知识。带着问题去学习永远是最好的方法,接触一段时间iOS开发以后再来看斯坦福iOS公开课,又会有许多新的发现,对于已有的概念有了新的认识。这次课程笔记主要用作归纳知识点,整理学习思路,与大家讨论课后习题,交流等。

  第一课:iOS概述

    1、iOS分层:①Core OS:核心操作系统层,基于UNIX内核(套接字,文件系统,电源管理,钥匙串,Bonjour等)。API多为C函数,实际应用使用较少。

           ②Core Servers:核心服务层(数组,字典,字符串,面向对象的文件系统,多线程,GPS,数据库等),使用较多。

           ③Media:媒体层(视频,图像,音频编辑等),使用较多。

           ④CocoaTouch:触控应用层(控件如按钮,文本框等,交互动画,本地化,相机,网页浏览视图等),使用较多。

    2、开发相关:①工具:Xcode

            ②语言:objective-C

            ③框架(framework):Foundation,CoreData,MapKit,UIKit,CoreMotion等

            ④设计模式:MVC(推荐),其他模式在后续课程中也会使用到,MVC贯穿始终。

    3、MVC设计模式:Model,View,Controller:一种将应用中的类组织起来的策略,所有的类将被分入这三块之一。

              Model = What your application is (but not how it is displayed) 

              Controller = How your Model is presented to the user (UI logic) 

              View = Your Controller’s minions 

            如下图所示:

          通信方式:①控制器(controller)直接操作模型(Model),可以直接使用其API

               ②控制器(controller)直接操作视图(View),通过输出口的方式(outlet),可以直接使用其API。

                 ③模型(Model)与视图(View)之间禁止通信。(模型完全独立于UI)

               ④视图(View)不能直接与控制器(Controller)通信,而是通过以下间接方式:target-action(如按钮,滑动条等),协议(委托(delegate)or 数据源(dataSource)):protocol(如tableview等)。

               ⑤模型(Model)不能直接与控制器(Controller)通信,而是通过通知机制(Notification)或者键值观察机制(KVO)来进行通信。

          多MVC情况如下图所示:

            

    4、objective-C

      ①strong&weak:strong:只要有强指针指向对象,就在堆中保持这个对象,当不再有强指针指向对象时(nil),则对象会被释放。

                weak:当没有强指针指向对象时(可能还有弱指针指向对象),释放对象。

      ②nonatomic:非原子性,表示此对象不是线程安全的,若为原子性会在属性的setter和getter方法中加锁,影响性能。

    5、源代码

      Card.h

1 #import <Foundation/Foundation.h>2 3 @interface Card : NSObject4 @property (strong,nonatomic) NSString *contents;5 @property (nonatomic,getter=isChosen) BOOL chosen;6 @property (nonatomic,getter=isMacthed) BOOL matched;7 8 - (int)match:(NSArray *)otherCards;9 @end

Card.h

 

      Card.m

 1 #import "Card.h" 2  3 @interface Card() 4  5 @end 6  7 @implementation Card 8  9 - (int)match:(NSArray *)otherCards10 {11   int score = 0;12   13   for (Card *card in otherCards)14   {15     if ([card.contents isEqualToString:self.contents])16     {17       score = 1;18     }19   }20   21   return score;22 }23 24 @end

Card.m

 

    6、作业:

 

课程视频地址:网易公开课:http://open.163.com/movie/2014/1/M/7/M9H7S9F1H_M9H7TMJM7.html

       或者iTunes U搜索standford课程