斯坦福大學(xué)iOS公開課筆記(5)--ViewController生命周期和通知


title: 斯坦福大學(xué)iOS公開課筆記(5)--ViewController生命周期和通知
date: 2017-05-20 22:05:57
tags:


這一節(jié)課主要講了ViewController的生命周期,在課程的后半部分還講了通知Notification。在這兩個知識點中間使用了一個字符串屬性設(shè)置的demo進(jìn)行知識點的進(jìn)一步認(rèn)識。

字符串屬性Demo

這個部分主要通過在UITexeView上顯示一段文字,然后在Demo中展示了使用按鈕設(shè)置文字的輪廓以及去除輪廓和點擊按鈕將文字設(shè)置為按鈕的背景色。

Atttibutor.png

設(shè)置字符串屬性一般情況下是使用可變字符串NSMutableAttributedString,修改UITextView中的字符串屬性,一般是通過使用它的textStrong屬性,在其中添加屬性和控制的范圍NSRange

比如說修改選定字符串的顏色:

- (IBAction)changeBodySelectionColorToMatchBackgroundOfButton:(UIButton *)sender
{
    [self.body.textStorage addAttribute:NSForegroundColorAttributeName
                                  value:sender.backgroundColor
                                  range:self.body.selectedRange];
}

還有使用NSMutableAttributedString來設(shè)置一段字符串的屬性

    NSMutableAttributedString *title =
    [[NSMutableAttributedString alloc] initWithString:self.outlineButton.currentTitle];
    
    [title addAttributes:@{NSStrokeWidthAttributeName : @3,
                           NSStrokeColorAttributeName : self.outlineButton.tintColor}
                                                range : NSMakeRange(0, [title length])];

    [self.outlineButton setAttributedTitle:title forState:UIControlStateNormal];

其中NSForegroundColorAttributeName屬性為要修改的字符串屬性類型,后邊的value即為對應(yīng)的值,range后跟著的是需要修改的范圍,比如上邊例子中需要修改的就是選中的部分 self.body.selectedRange

除了顏色之外,Demo中還講了其他兩種屬性,

NSForegroundColorAttributeName //屬性字符串字符的顏色
NSStrokeColorAttributeName //屬性字符串字符輪廓的顏色
NSStrokeWidthAttributeName //屬性字符串字符輪廓的寬度

ViewController 生命周期

ViewController(以下簡稱VC)的生命周期在iOS開發(fā)中起到了至關(guān)重要的作用,他主要是在程序運行的過程中,在不同的時期使用不同的方法,理解并合理的根據(jù)VC的生命周期進(jìn)行代碼編寫設(shè)計可以起到很好的作用。

viewDidLoad

在整個VC的創(chuàng)建過程中只調(diào)用一次,所以適合放置一些init方法。

因為此時頁面中的幾何方法還沒有確定下來,所以不適合處理一些幾何方面的東西。

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

viewWillAppear

每當(dāng)VC即將顯示在屏幕上給用戶看之前都會調(diào)用的方法,所以可以調(diào)用一些幾何相關(guān)的代碼進(jìn)行設(shè)置,而且只要調(diào)用了viewWillAppear就一定會顯示界面給用戶。

因為會調(diào)用多次,所以并不適合放置一些init方法。

- (void)viewWillAppear:(BOOL)animated
{
    [super viewWillAppear:animated];
    ...
}

viewWillDisappear

當(dāng)頁面即將離開屏幕時調(diào)用,因為即將離開,所以可以在這里調(diào)用一些銷毀對象、停止動畫的方法,來節(jié)省系統(tǒng)資源的占用。并且可以進(jìn)行一些數(shù)據(jù)方面的保存。

- (void)viewWillDisappear:(BOOL)animated
{
    [super viewWillDisappear:animated];
    ...
}

viewDidAppear

對應(yīng)viewWillAppear,在頁面出現(xiàn)在屏幕上之后調(diào)用。

- (void)viewDidAppear:(BOOL)animated
{
    [super viewDidAppear:animated];
    ...
}

viewDidDisappear

對應(yīng)viewWillDisappear,在頁面從屏幕上離開后調(diào)用

- (void)viewDidDisappear:(BOOL)animated
{
    [super viewDidDisappear:animated];
    ...
}

viewWillLayoutSubViews & viewDidLayoutSubViews

相對于viewWillAppear,更適合于對幾何相關(guān)的操作的方法。

didReceiveMemoryWarning

當(dāng)內(nèi)存占用過高時,會調(diào)用此方法,可以在此方法中添加一些釋放占用內(nèi)存大的對象,比如圖片、聲音、視頻等等。如果你的應(yīng)用時候內(nèi)存過高但是又不釋放內(nèi)存,iOS會將你的應(yīng)用殺掉!

- (void)didReceiveMemoryWarning {
    [super didReceiveMemoryWarning];
    ...
}

Notification 通知

通知是MVC中很重要的一部分,用于發(fā)送信號告訴其他人我的值發(fā)生了改變,監(jiān)聽者接收到通知之后會做出一些處理。

注冊通知

注冊一個通知需要用到4個參數(shù):

  • observer:通知的接受者,一般為viewController,所以我們將通知的注冊寫在控制器中時,這個值對應(yīng)為self。
  • selector:observer中的方法,接收到廣播時調(diào)用。
  • name:廣播的名字。
  • object:當(dāng)廣播特定對某個對象作用的時候使用。

下邊這個方法就是注冊一個監(jiān)聽系統(tǒng)字體發(fā)生改變的通知,當(dāng)用戶在修改設(shè)置中iOS字體的大小時,就會調(diào)用preferredFontsChangeed:方法進(jìn)行相應(yīng)的處理。

    [[NSNotificationCenter defaultCenter] addObserver:self
                                             selector:@selector(preferredFontsChangeed:)
                                                 name:UIContentSizeCategoryDidChangeNotification
                                               object:nil];

移除通知

當(dāng)我們離開這個頁面的時候,我們需要將注冊過的通知移除掉,以免我們的程序發(fā)生問題,這里的參數(shù)基本與注冊通知時一致。

    [[NSNotificationCenter defaultCenter] removeObserver:self
                                                    name:UIContentSizeCategoryDidChangeNotification
                                                  object:nil];

AttributedGif.gif
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容