斯坦福公开课IOS7 阅读笔记(第一课)
开始写这个读书笔记,主要是为了巩固强化ios的基础知识,之前浪费很多时间,在ios开发的细节上并没有细细考究,知其然不知其所以然,总是在已经造好的汽车上修修补补,对于基础的知识没有一个完整透彻的认识,知识树残缺不全,也就造成在工作中现出许多短板,所以希望通过这个连载读书笔记可以有所改进。
第一课的只是主要讲了两方面知识,MVC和Introduction of Object-c
0.what's in iOS
Core OS 核心操作系统层,最接近硬件的一层 Unix内核
Core Services 核心服务层,OS之上的面向对象的一层
Media 现有开发过程中接触较少,后续待研。
Cocoa Touch 即UI层,Cocoa存在很久的一项技术,最初是用来给Mac OS系统设计的一套API,后来iPhone的出现,出现这个版本,两个平台之间很多API是可以共用的。
1.MVC
在之前学习JAVA的时候,就已经接触过,三个阵营不需要赘述,其中最重要的部分其实是在三者之间的通信方式
Controller-->Model C需要知道M的一切并且需要要有同M完全的通信能力,但是注意箭头是单向的。
Controller-->View 之间的绿色箭头,通信同上,控制器指向视图时候用接口outlet。
View-->Controller 可以通信,但是必须小心,1.action-target模式(待深究),列子:view上面的滑动条。2.delegate,滚动视图本省没有足够的逻辑去知道答案(should,will,did),于是将解答这些问题的权利委托给其他对象,不知道这个对象,只知道这种对象能够回答这类问题。3.另一种特殊的委托(data source)待深究
Model-->Controller Model的变更如何通知Controller,比如使用的是一种网络数据库,有人修改了网络数据库,如何通知C。Notification&KVO 常看到的词汇,类似消息通知,类似的还有RAC,待深究。
Model和View之间保持完全独立。
总结:三大阵营的工作流程是这样的:controller去model那取数据,告诉view展现数据在屏幕上。即使只有一行代码,也得有controller来参与,不能坏了规矩。model不能主动勾搭controller,那model数据有变化了,那怎么让controller知道呢?Notification 或KVO机制。当model数据改变,它就广播,controller就收到了
2.Introduction of Object-C
objective-c是c的超集,import 的使用类似于C的include,@property替代了原来类里的实例变量,当然实例变量也可以使用,@property帮你自动生成getter 和setter,@property之后就可以用点号 self.topSpeed访问变量了,相当于[self topSpeed]
.h中是公共API,类中你所希望具有的公共性质,其他类可以调用的
.m里是私有的以及你所有的实现
实例变量的理解 Foundation NSObject ObjectC中的所有对象都在堆(分配闲置内存的地方)中,有指针指向它们,如何分配内存
strong 指针的属性,保持对这个存储在堆中指针所指的东西,只要我和其他任何有一个强指针指向它,那么会保持存在,只要不再有强指针指向它,内存就会释放。这种可预见性的内存管理方式,较之java的垃圾收集机制要好很多,称之为自动引用计数
weak 相对于strong类型的指针,出现以上情况的时候,会被置为nil,也就是常说的空指针,不指向任何东西,不仅释放内存,而且指针被设置为nil
nonatomic 非原子性,不能有两个线程,同时尝试设置该属性,不线程安全。ios里的多线程,不是一个对象上多个线程在设置,,通常是另外一组对象,运行在另外一个线程,UI专门运行在UI线程,Model在自己的线程,他们之间在线程间通信
BOOL 不需要强弱来修饰,因为他们是原始类型,并没有存储在堆中,只是整形或者浮点型,没有内存需要管理,所以不设计到指针
视频观看地址:http://open.163.com/special/opencourse/ios7.html 当前页面有所有课件下载链接,聪明的你一定可以看到的。