1.架构
cocoa touch
media
core data?
core os?
2.mvc
model is about "what". what is you app.
controller
直接访问model,view,
获取model数据让view来展示
与view的action/target
view controller的跟班
在Calculator中
控制器拥有brain的实例,用于操作model,存数据或者计算返回结果,通知display显示结果
view显示的数据由controller从model处获取,view不会去拥有这些展示的数据
view --> controller (action --> target)
1.当有动作发生[press button],view发送一个action,不管是哪个控制器target接收[controllerA,controllerB...]
2.行为。按钮可不可用等 通过delegate方式从controller中得出结果 委托 delegate protocol
3. data source 展示数据来源
model -->controller
1.广播 例如系统的数据更改了。发出一个广播[一般是controller接收,当然model不管谁接收,只管发送],controller收到后可能去让view更改视图
2.数据处理。calculator案例中按下operation,返回结果。 单独存在。
多个mvc之间:
controllerA <--> controllerB
controllerA --> modelB
controllerA --> viewA // 只与自己的controller连接
3.objective-c 概要
每个类都有.h,.m
.h
存放公共API
.m 实现以及定义私有 属性和方法[主要是属性]
Card.h
#import <Foundation/Foundation.h>
@interface Card.h : NSObject
// oc中所有的对象都有指针指向它
// strong表示当引用计数为0时就释放,而weak表示为0时设置指针为nil
// nonatomic非原子 同该属性一同的setter and getter不是线程安全的。就是你不能有两个线程同时尝试设置该属性
//@property会自动设置getter和getter
@property (strong,nonatomic) NSStirng *contents; //
// 简单情况下是nonatomic,不然有locking code?
@property (nonatomic) BOOL chosen;
// 默认是生产getter chosen,你可以自定义getter或者setter
// @property (nonatomic, getter = isChosen) BOOL chosen;
// 访问属性要比直接访问实例变量要好
// _contents变成了一个第三方属性,来代表实例变量
@property (nonatomic) BOOL matched;
-(int)match:(Card *)card;
@end
Card.m
#import "Card.h" // 引入头文件 知道公共api
@interface Card() // 别忘记 ()
{
// private properties [mainly]
}
// private method
@end
@implementation Card // 不需要写父类
//-----------------------------------------------------------
// 以下setter和getter是自动生成的,
// 视情况你也可以重写,比如在getter中初始化或者setter中设定条件
@synthesize contents = _contents; // synthesize 合成,制定_contents来使用
-(NSString *) contents{
return _contents; // use _contents not self.contents;
}
-(void)setContents:(NSString *)contents{
_contents = contents; // 参数名不允许和实例名一样
}
//--------------------------------------------------------
// detail
-(int)match:(Card *)card
{
int score = 0;
// getter setter 属于复合[合成] 使用变量_contents
// 其他情况使用self.contents; 调用setter getter用.dot
// sending message
// 这里不是用 == , ==表示指针比较
if([card.contents isEqualToString:self.contents]){
score = 1;
}
// for(Card *card in cards){ //always a * ,所有对象都有一个指针
//
// }
return score;
}
@end
objective-c 笔记1
最新推荐文章于 2024-10-02 10:45:53 发布