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
1.init method
只能呼叫一次
包含alloc
always return self
2. instancetype
IOS7加入,代表和目前class相同的class type
3. self = [super init]
必須先呼叫super initializer
initializer 不能 initialize時會 return nil,以此來檢查是否有正常initialize
Paul在這邊這樣用不是為了效能,是為了可讀性,因為每次使用這些method時都要產生一次String array
三、 PlayingCardDeck
繼承自Deck,只有一個method,目的是初始化52張撲克牌。只能呼叫一次
包含alloc
always return self
2. instancetype
IOS7加入,代表和目前class相同的class type
3. self = [super init]
必須先呼叫super initializer
initializer 不能 initialize時會 return nil,以此來檢查是否有正常initialize
四、Xcode
xcode的基本操作,也是這周的作業,在投影片裡面有很詳細的步驟。