objective-c 笔记1

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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值