iOS懶加載(self.value與_value注意)

周末閑來無事,想談?wù)勛约洪_發(fā)中的一些淺認(rèn)識。最近看自己以前寫的代碼,大量的UI初始化寫在視圖加載viewDidLoad方法中,這顯然是不規(guī)范和不專業(yè)的。寫出高質(zhì)量優(yōu)美的代碼,應(yīng)該是一個(gè)進(jìn)階程序員的共同追求,今天首先想談?wù)勗赨I加載優(yōu)化中經(jīng)常用到的iOS懶加載。

1、iOS懶加載定義

在iOS5之前需要使用編譯器指令@synthesize告訴編譯器幫助生成屬性的getter,setter方法。之后會默認(rèn)生成。編譯器在生成getter,setter方法時(shí)先檢查有沒有自定義getter,setter方法,如果有則使用自定義的,沒有定義系統(tǒng)就默認(rèn)生成。
懶加載可以定義為:延時(shí)加載,即當(dāng)對象需要用到的時(shí)候再去加載。其實(shí)就是重寫屬性的getter方法,然后加一個(gè)判斷,為空則賦值,不為空則返回。

#import "testViewController.h"
@interface ViewController ()
@property (nonatomic, strong) UIView *testView;
@end
@implementation ViewController
- (void)viewDidLoad {
    [super viewDidLoad];
    [self.view addSubview:self. testView]; //注意:一定要是self.testView,如果是_testView子視圖會為nil
 }
// 懶加載
-(UIView *) testView {
   if (_testView == nil) {
       _testView = [[UIView alloc] initWithFrame:CGRectMake(0, 0, self.view.frame.size.width, 30)];
       _testView.backgroundColor = [UIColor redColor];
   }
   return _testView;
}
@end

2、iOS懶加載注意事項(xiàng)

1)、重寫getter方法時(shí),先判斷對象當(dāng)前是否為空,為空的話再去實(shí)例化對象;
2)、當(dāng)使用self. testView會調(diào)用testView的getter方法而_ testView并不會調(diào)用,正確的使用個(gè)方式是通過self. testView去調(diào)用才會執(zhí)行懶加載方法。

很多初學(xué)者在懶加載定義之外區(qū)域調(diào)用懶加載變量時(shí),不怎么注意self. testView 和 _ testView的區(qū)別,一直使用_testView,所以才導(dǎo)致懶加載方法一直沒有被調(diào)用。原因分析:self. testView會調(diào)用類的getter方法,而如果直接用_testView只是直接訪問類的實(shí)例變量,而不會調(diào)用getter方法了。

3、iOS懶加載的優(yōu)點(diǎn)

1)、對系統(tǒng)的內(nèi)存占用率會減??;
2)、對象的實(shí)例化在getter方法中,各司其職,降低耦合性;
3)、不需將對象的實(shí)例化寫到viewDidLoad,可以簡化代碼。

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

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

  • 要睡了,卻聽見窗外噼里啪啦的聲響 不用多想又開始下雨了,已經(jīng)不知道這是第幾天的雨了。這樣的天氣其實(shí)最適合窩在被...
    lotus_yeer閱讀 260評論 0 1
  • 被刪掉的人可能曾經(jīng)有過幾百頁暢聊的聊天記錄; 街上碰見了也不打招呼的人可能曾經(jīng)也樂此不疲地整天膩在一起; 背地里把...
    LiuQingA閱讀 278評論 0 0
  • 我是一個(gè)極度懶散并且患有嚴(yán)重拖延癥的人,很早就打定主意在十九歲生日的時(shí)候大寫一篇文章,最后卻拖到了這天還是空想一片...
    倆面閱讀 562評論 0 2
  • 我個(gè)人讀書有很多興趣點(diǎn),其中一個(gè)喜歡讀近現(xiàn)代高級知識分子官員的書籍。2012冬天在北京時(shí)候,我在北京交通大學(xué)文...
    寓剛于柔閱讀 258評論 0 0

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