第一讲:
一、obj-c中MVC的构成
MVC包括controller,model和view三部分。
model是存放具体数据定义和程序内容的地方,what the app is not how display
model和model之间不能互相直接通信。model不能直接向controller通信,可以通过radio station=notification方式来进行通信,由controller来获取其需要的信息。
view是UI部分,即显示model到屏幕上,view不储存其展示的信息,如果需要可以使用一定的protocol从controller来获取需要展示的信息。
view和model之间不能互相直接通信。view不能直接向controller通信,可以通过action-target方式和delegate方式向controller通信。
controller为总体控制部分。
controller可以直接向view和model通信(与view通信称为outlet)
controller会转换model中的信息,再发送给view。
关系图如下:
二、类的声明和使用
在obj-c中分公共类和私有类,.h文件公有,.m文件私有。
.h文件中声明类时,使用@interface 类名 : 父类/NSObject 以@end结尾
.m文件声明类时,使用@interface 类名 以@end结尾
声明.h文件类时要加入头文件,若此类即为superclass,头文件使用#import <Foundation/Foundation.h> (Foundation里包括基本的非UI对象,比如NSObject),可以简写为#import Foundation;
.m文件是为了implement.h文件,所以.m文件头文件需要#import ".h类名",并在后面接上@implementation 类名
三、property的概念
在obj-c中不能直接对实例变量处理,而是采用property。property会自动生成对应变量的setter/getter方法。property可为任意类型。
setter名为set+变量名(首字母大写),getter名为变量名
在.h文件中声明指针型property时,使用@property ( strong/weak, nonatomic/空) 该property指向对象的类型or类 *property名;
weak:意为当不存在强指针指向此弱指针指向的obj时,此obj从堆中丢弃并给此弱指针赋值nil ← 若property为primitive类型,则不用判定强弱
strong:意为保证此强指针所指向的obj在强指针被赋值为nil之前都存在于堆中
nonatomic:means “access to this property is not thread-safe”.
We will always specify this for object pointers in this course. If you do not, then the compiler will generate locking code that will complicate your code elsewhere.
以下部分若非有特别要求,可不用写:
在.m文件创建property时,使用@synthesize property名 = _property名;
并重写getter/setter。
声明bool类型property时,若想要更改getter的方法名,可在"()"内输入 getter = 方法名 ← 只是为了方便代码阅读
私有property:
当需要私有property时,需要将property写在@implementation中
四、method
声明方法:(返回值类型)method名 : (参数类型) 参数名; ← 在header中声明即可保证method public
在.m文件中override即可
五、发送消息 - calling
用[]表示calling,
calling : “用于通知某个对象该做什么即通知对象去执行某动作"
四、Card Game Demo