斯坦福大學(xué)iOS公開課學(xué)習(xí)筆記(2)-初始化和翻紙牌小Demo


title: 斯坦福大學(xué)iOS公開課學(xué)習(xí)筆記(2)-創(chuàng)建類溃槐、方法和翻紙牌小Demo
date: 2017-05-04 14:14:42
tags:


五一的時(shí)候出去玩了一圈贝室,回來終于有時(shí)間整理第二節(jié)課的東西了娇掏。
這一節(jié)課的上半節(jié)課主要講了初始化一些類時(shí)候用到的知識點(diǎn)浙踢,在下半節(jié)課使用Xcode創(chuàng)建了一個翻紙牌的小Demo瞎访。

懶加載

懶加載是什么

懶加載,也稱作延時(shí)加載叹侄,顧名思義懶加載就是在需要到他的前一秒才開始加載休弃,而不是在類初始化的時(shí)候就去加載,這樣做可以減少內(nèi)存的占用圈膏。其實(shí)懶加載就是重寫他的getter方法。

懶加載有什么好處

  • 不用將所有的初始化代碼都寫在viewDidLoad: 中篙骡,加強(qiáng)了代碼的可讀性
  • 每個變量的getter方法負(fù)責(zé)自己的實(shí)例化處理稽坤,加強(qiáng)獨(dú)立性。
  • 節(jié)約內(nèi)存占用糯俗,只有到真正要使用的時(shí)候才去加載尿褪。

如何實(shí)現(xiàn)

@interface ViewController ()

@property (nonatomic ,strong) NSMutableArray    *cards;

@end

@implementation ViewController

- (void)viewDidLoad
{
    [super viewDidLoad];
}

- (NSMutableArray *)cards
{
    if(_cards == nil)
        _cards = [[NSMutableArray alloc] init];
    
    return _cards;
}

數(shù)組的簡單使用

課中主要介紹了一下可變數(shù)組的簡單使用,比如插入得湘、刪除的寫法杖玲。還有使用@[ ]方法快速創(chuàng)建一個數(shù)組。
需要注意的是:

  • 在插入元素的時(shí)候一定不能插入空元素淘正,不然會導(dǎo)致程序發(fā)生崩潰摆马。
  • 數(shù)組訪問時(shí)要保證數(shù)組下標(biāo)不能越界,不然也會導(dǎo)致程序發(fā)生崩潰鸿吆。

插入的簡單使用

- (void)addCard:(Card *)card atTop:(BOOL)atTop
{
    if(atTop)
    {
        [self.cards insertObject:card atIndex:0];
    }
    else
    {
        [self.cards addObject:card];
    }
}

刪除的簡單使用

- (Card *)drawRandomCard
{
    Card *randomCard = nil;
    
    //這里注意判斷是否下標(biāo)越界
    if([self.cards count])
    {
        unsigned index = arc4random() % [self.cards count];
        randomCard = self.cards[index];
        [self.cards removeObjectAtIndex:index];
    }
    
    return randomCard;
}

使用@[ ]快速創(chuàng)建一個數(shù)組

- (NSString *)contents
{
    //這里使用@[ ]創(chuàng)建一個數(shù)組
    NSArray *rankStrings = @[@"?",@"A",@"2",@"3",@"4",@"5",@"6",@"7",@"8",@"9",@"10",@"J",@"Q",@"K"];
    
    return [rankStrings[self.rank] stringByAppendingString:self.suit];
}

+ 類方法

類方法是發(fā)送消息給類囤采,而不是給對象實(shí)例。類方法不可以使用其他實(shí)例變量惩淳。
一般只有兩種情況下會使用類方法

  • 創(chuàng)建事物蕉毯,類的初始化時(shí)。
  • 工具方法,返回一個常亮的時(shí)候代虾。
+ (NSArray *)ValidSuits
{
    return @[@"??",@"??",@"??",@"??"];
}
- (void)setSuit:(NSString *)suit
{
    if ([ [PlayingCard ValidSuits] containsObject:suit]) {
        _suit = suit;
    }
}

init方法

init方法用作初始化時(shí)进肯,他必須與alloc成對出現(xiàn)并且緊跟alloc后。而且只調(diào)用一次棉磨。
instancetype作為方法的返回值江掩,只能作為返回值,不能像id那樣作為參數(shù)含蓉。

- (instancetype)init
{
    self = [super init];
    
    if(self)
    {
        for(NSString *suit in [PlayingCard validSuits])
        {
            for(NSUInteger rank = 1; rank <= [PlayingCard maxRank]; rank++)
            {
                PlayingCard *card = [[PlayingCard alloc] init];
                card.rank = rank;
                card.suit = suit;
                [self addCard:card];
            }
        }
    }
    
    return self;
}

翻紙牌小Demo

這個Demo主要演示了如何使用storyboard來創(chuàng)建UI并且將它與代碼相關(guān)聯(lián)频敛。整體的使用下來并沒有太多的代碼。完成之后的代碼和storyboard的截圖如下馅扣。

finalShow.png

完成之后的樣式圖:

FinalFlips.gif

按鈕相關(guān)的代碼

- (IBAction)touchCardButton:(UIButton *)sender
{
    if([sender.currentTitle length])
    {
        UIImage *cardImage = [UIImage imageNamed:@"cardBcak"];
        [sender setBackgroundImage:cardImage forState:UIControlStateNormal];
        [sender setTitle:@"" forState:UIControlStateNormal];
    }
    else
    {
        UIImage *cardImage = [UIImage imageNamed:@"RectanglecardFace"];
        [sender setBackgroundImage:cardImage forState:UIControlStateNormal];
        [sender setTitle:@"A??" forState:UIControlStateNormal];
    }
    
    self.flipCount++;
    
}

計(jì)數(shù)框相關(guān)的代碼斟赚,這里重寫了filpCount的setter方法來更改計(jì)數(shù)框中的值。

- (void)setFlipCount:(int)flipCount
{
    _flipCount = flipCount;
    
    self.flipsLabel.text = [NSString stringWithFormat:@"Flips: %d",self.flipCount];
}
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末差油,一起剝皮案震驚了整個濱河市拗军,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌蓄喇,老刑警劉巖发侵,帶你破解...
    沈念sama閱讀 217,907評論 6 506
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異妆偏,居然都是意外死亡刃鳄,警方通過查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,987評論 3 395
  • 文/潘曉璐 我一進(jìn)店門钱骂,熙熙樓的掌柜王于貴愁眉苦臉地迎上來叔锐,“玉大人,你說我怎么就攤上這事见秽∮淅樱” “怎么了?”我有些...
    開封第一講書人閱讀 164,298評論 0 354
  • 文/不壞的土叔 我叫張陵解取,是天一觀的道長步责。 經(jīng)常有香客問我,道長禀苦,這世上最難降的妖魔是什么蔓肯? 我笑而不...
    開封第一講書人閱讀 58,586評論 1 293
  • 正文 為了忘掉前任,我火速辦了婚禮伦忠,結(jié)果婚禮上省核,老公的妹妹穿的比我還像新娘。我一直安慰自己昆码,他們只是感情好气忠,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,633評論 6 392
  • 文/花漫 我一把揭開白布邻储。 她就那樣靜靜地躺著,像睡著了一般旧噪。 火紅的嫁衣襯著肌膚如雪吨娜。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 51,488評論 1 302
  • 那天淘钟,我揣著相機(jī)與錄音宦赠,去河邊找鬼。 笑死米母,一個胖子當(dāng)著我的面吹牛勾扭,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播铁瞒,決...
    沈念sama閱讀 40,275評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼妙色,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了慧耍?” 一聲冷哼從身側(cè)響起身辨,我...
    開封第一講書人閱讀 39,176評論 0 276
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎芍碧,沒想到半個月后煌珊,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 45,619評論 1 314
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡泌豆,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,819評論 3 336
  • 正文 我和宋清朗相戀三年定庵,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片踪危。...
    茶點(diǎn)故事閱讀 39,932評論 1 348
  • 序言:一個原本活蹦亂跳的男人離奇死亡洗贰,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出陨倡,到底是詐尸還是另有隱情,我是刑警寧澤许布,帶...
    沈念sama閱讀 35,655評論 5 346
  • 正文 年R本政府宣布兴革,位于F島的核電站,受9級特大地震影響蜜唾,放射性物質(zhì)發(fā)生泄漏杂曲。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,265評論 3 329
  • 文/蒙蒙 一袁余、第九天 我趴在偏房一處隱蔽的房頂上張望擎勘。 院中可真熱鬧,春花似錦颖榜、人聲如沸棚饵。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,871評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽噪漾。三九已至硼砰,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間欣硼,已是汗流浹背题翰。 一陣腳步聲響...
    開封第一講書人閱讀 32,994評論 1 269
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留诈胜,地道東北人豹障。 一個月前我還...
    沈念sama閱讀 48,095評論 3 370
  • 正文 我出身青樓,卻偏偏與公主長得像焦匈,于是被迫代替她去往敵國和親血公。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,884評論 2 354

推薦閱讀更多精彩內(nèi)容