斯坦福iOS7 Lesson1

学习了Ray的四个课程后,想重新巩固下自己的iOS知识,准备开坑斯坦福的iOS。最近出了iOS9的课程,大家可以去围观白胡子老头了,课程地址为:https://itunes.apple.com/us/course/developing-ios-9-apps-swift/id1104579961


而自己再重新看一遍iOS7的课程,做个笔记吧:

1.MVC

---iOS中大量采用的设计模式策略之一,下图太经典,大家可以常看常感受。

关系阐述:

Controller将Model解释给View,让Model显示在View上

C持有View的outlet,通过outlet和View进行通信

相反,View对C知道的并不多,通过action的方式,可以发送消息给设置了Taget的C。而View和C之间又是如何通信的呢?  View通过delegate(will,should,did)和数据源datasoure(count)的方式和C进行通信

Model和View是完全独立的,通过C进行通信。model改变的时候,如何通知C呢?使用Notification&KVO通知C,model改变了

总结:

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在图上有一个信号塔类似的图形,旁边写着Notification & KVO。这表明Model主要是通过Notification和KVO来和Controller通讯的难点:

难点:

C中可以有指向model的strong reference、view的weak reference引用。为什么C中的View属性是weak reference而不是强应用呢?下图中所示,因为C中会有一个strong引用的View,是每一个controller的顶级View。


斯坦福iOS7 Lesson1_第1张图片

2.nonatomic, strong,weak

使用nonatomic是因为,我们的project中不需要多线程的东东,可以提高代码效率。nonatomic 非原子性,不能有两个线程,同时尝试设置该属性,不线程安全。ios里的多线程,不是一个对象上多个线程在设置,,通常是另外一组对象,运行在另外一个线程,UI专门运行在UI线程,Model在自己的线程,他们之间在线程间通信。

strong 指针的属性,保持对这个存储在堆中指针所指的东西,只要我和其他任何有一个强指针指向它,那么会保持存在,只要不再有强指针指向它,内存就会释放。这种可预见性的内存管理方式,较之java的垃圾收集机制要好很多,称之为自动引用计数。

weak  相对于strong类型的指针,出现以上情况的时候,会被置为nil

内置类型,比如int,bool类型不需要设置strong,weak,因为他们不是heap上的对象,而是内存上的东东。

你可能感兴趣的:(斯坦福iOS7 Lesson1)