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
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.