2015年11月24日 星期二

(CS193p) Developing Applications for IOS 2013 筆記 Lecture2 Xcode5

Lecture2 Xcode5

這禮拜繼續講解他的紙牌遊戲

一、 Desk

1. - (void)addCard:(*Card)card atTop:(BOOL)atTop
這個method的名稱為addCard atTop
extra arguments的穿插方式比較特別
注意Objective-C中method名稱不可重複

2. NSMutableArray
NSArray通常不會改變,而MutableArray可以動態加入或刪除物件,類似Java的ArrayList

3. Lasy Instantiation
MutableArray的getter需要覆寫,如果getter中只有return _property,將永遠只return nil,因為MutableArray從來沒有被allocate過。所以應該把getter改成:
- (NSMutableArray *)cards
{
    if(!_cards)
      _cards = [[NSMutableArray alloc] init];
    return _cards;

}

4. 補充unsigned
unsigned修飾詞代表非負數,直接寫unsigned等於unsigned int非負整數

5. Paul教授補充
Q:為什麼不用NSNumber? 
A:因為NSNumber是Object,這裡只是個簡單的local變數,通常需要再多個method間傳遞時才會用Object

二、PlayingCard

繼承自Card,用來製造撲克牌

1. Properties
suit:花色  rank:點數

2. NSUInteger
= unsigned int,在iPhone4(32-bit)和iPhone5(64-bit)上長度不同

3. @
@在Object-C裡面代表Object
而String物件(NSString)需要表達成@""
@[]代表Object Array

4.Override
覆寫contents的getter,return花色和點數的String
覆寫suit的getter,如果suit=nil,return "?"
覆寫suit的setter,只能輸入♠,♥,♣,
注意!同時Override setter和getter時會出現錯誤,一定要在前面加上:
@synthesize myProperty = _myProperty;

5. Class Method
似乎有點像Java的static method,呼叫時是用[MyClass calssMethod]
method前面不是"-",而是"+"
send to class, not send to instance of an Object
use it when you're creating things
Paul在這邊這樣用不是為了效能,是為了可讀性,因為每次使用這些method時都要產生一次String array

三、 PlayingCardDeck

繼承自Deck,只有一個method,目的是初始化52張撲克牌。

1.init method
只能呼叫一次
包含alloc
always return self

2. instancetype
IOS7加入,代表和目前class相同的class type

3. self = [super init]
必須先呼叫super initializer
initializer 不能 initialize時會 return nil,以此來檢查是否有正常initialize

四、Xcode

xcode的基本操作,也是這周的作業,在投影片裡面有很詳細的步驟。




沒有留言:

張貼留言