Markdown一下&课程地址
Markdown语法速览,开始使用简书来记录学习iOS的历程及一些小想法与大伙分享。
课程地址:斯坦福大学公开课:iOS7应用开发
题记
敲完Stanford公开课(iOS7)1-3课达到的目的:快速熟悉OC的一些基本语法、Xcode的使用以及思考在游戏里面MVC的用法。
MVC架构图解
- 视图(View) :用户界面(可视UI)
- 模型(Model): 业务模型(业务处理逻辑)
- 控制器(Controller): 确保Model和View的同步,一旦Model改变,View应该同步更新
开始游戏
效果图 :
游戏拆解(Model)
通过这五个类学习OC的面向对象继承等属性,这里主要说下封装了游戏逻辑的CardMatchingGame类:
#import <Foundation/Foundation.h>
#import "Deck.h"
#import "Card.h"
//设计一个类封装游戏的逻辑
@interface CardMatchingGame : NSObject
//初始化封装类CardMathingGame 参数指定游戏的牌数 和牌堆
- (instancetype)initWithCardCount:(NSUInteger)count usingDeck:(Deck *)deck;
//通过下标选中牌
- (void)chooseCardAtIndex:(NSUInteger)index;
//通过下标返回一张牌
- (Card *)cardAtIndex:(NSUInteger)index;
@property (nonatomic,readonly) NSInteger score;
@end
学习以及总结以后新建类的时候哪些公开API,哪些要封装好即可(孰能生巧,要多敲代码)。
这里说下自定义初始化器
//自定义初始化方法(为什么要self = [super self]?先这样写(苹果这样要求))
- (instancetype)initWithCardCount:(NSUInteger)count usingDeck:(Deck *)deck{
self = [super init];
if (self){
for (int i = 0; i < count; i++) {
Card *card = [deck drawRandowCard];
if (card){
[self.cards addObject:card];
}else {
self = nil;
break;
}
}
}
return self;
}
类实例化有的时候就要求对象做一些特殊处理,这就需要设计指定初始化器,因为原始的初始化方法-(instancetype)init方法是无法让实例对象持有有效的数据(自带的方法初始化后,基本数据类型属性=0;对象属性默认为nil)。
最后
不能也不要做温水煮青蛙,现在开始自学下iOS。如能小成,也算多了一份技能,这里以我比较喜欢的偶像之一,大家共勉!
Instagram的创始人凯文·赛斯特伦
Demo地址