iOS-設計模式-懶載入,ios-設計模式載入

來源:互聯網
上載者:User

iOS-設計模式-懶載入,ios-設計模式載入
一.為什麼要懶載入?答: iPhone裝置記憶體有限,如果在程式在啟動後就一次性載入將來會用到的所有資源,那麼久可能會耗盡iOS裝置的記憶體。這些資源例如大量的資料,圖片,音頻,過多的控制項等。二.懶載入思想是什嗎?答: 簡單的將就是拖到最後一刻,萬不得已了,才載入,才開始佔用資源。所謂懶載入,寫的就是其getter方法。在開發中,當程式中需要利用的資源時,在程式啟動的時候不載入,只有在運行當需要這些資源的時候再去載入這些資源。三: 懶載入的好處答: 1.不必將建立對象的代碼全部寫在viewDidLoad方法中,代碼的可讀性更強。        2.每個屬性的getter方法中分別負責鴿子的執行個體化處理,代碼彼此間的獨立性更強。        3.只有當真正需要資源的時候,再去載入,節省了記憶體資源。四:步驟:        1.在 @interface 裡聲明需要屬性。比如我需要兩個控制項label和textfield      @interface ViewController ()      @property (nonatomic,strong) UILabel * titleLabel;      @property (nonatomic,strong) UITextField *textField;      @end        2.重寫聲明屬性的getter方法(切記不要自己手動寫,Xcode會自動提示出來,寫出就費了)           #pragma mark 重寫titleLabel的getter方法
      - (UILabel *)titleLabel
      {          if (!_titleLabel)           {             self.titleLabel = [[UILabel alloc] initWithFrame:CGRectMake(10, 20, 100, 40)];             self.titleLabel.textAlignment = NSTextAlignmentCenter;             self.titleLabel.textColor = [UIColor blackColor];             self.titleLabel.text = @"呵呵";             [self.titleLabel sizeToFit];          }        return _titleLabel;      }     3.調用重寫的方法  self.方法名     //在viewDidLoad裡面調用initUI方法。      - (void)initUI     {          //只是載入到預想載入的view上。不在初始化方法裡為其alloc/init。只是一個指標,不會佔記憶體。          [self.view addSubview:self.titleLabel];          [self.view addSubview:self.textField];      }五.注意的問題:   1.指標循環參考問題    if (!_titleLabel)不可以寫成if (!self.titleLabel),不然就會形成循環參考指標。  return _titleLabel;不可以寫成return self.titleLabel;不然會形成循環參考。   2.如果你用vfl語句或者封裝的Masonry布局頁面的話,關於frame的那幾句代碼一定不能放重寫的get方法裡面,不然會報         找不到父視圖的錯誤。要放在addSubView那句後面,如:[self.view addSubview:self.textField];六.上代碼

#import "ViewController.h"@interface ViewController ()@property (nonatomic,strong) UILabel * titleLabel;@property (nonatomic,strong) UITextField *textField;@end@implementation ViewController- (void)viewDidLoad {    [super viewDidLoad];    [self initUI];}- (void)initUI{    //只是載入到預想載入的view上。不在初始化方法裡為其alloc/init。只是一個指標,不會佔記憶體。        [self.view addSubview:self.titleLabel];        [self.view addSubview:self.textField];}#pragma mark 重寫titleLabel的getter方法- (UILabel *)titleLabel{        if (!_titleLabel) {                self.titleLabel = [[UILabel alloc] initWithFrame:CGRectMake(10, 20, 100, 40)];        self.titleLabel.textAlignment = NSTextAlignmentCenter;        self.titleLabel.text = @"呵呵";        self.titleLabel.textColor = [UIColor blackColor];        [self.titleLabel sizeToFit];    }        return _titleLabel;}#pragma mark 重寫的textField的getter方法- (UITextField *)textField{    if (!_textField) {        self.textField = [[UITextField alloc] initWithFrame:CGRectMake(10, 100, 100, 40)];        self.textField.borderStyle = UITextBorderStyleRoundedRect;        self.textField.clearButtonMode = UITextFieldViewModeWhileEditing;        self.textField.placeholder = @"hehe";    }    return _textField;}@end

 

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.