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

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章