iOS 懶載入模式

2022-05-10 13:28:38 字數 4473 閱讀 5879

感謝: chengfang

ios開發—懶載入

1.懶載入——也稱為延遲載入,即在需要的時候才載入(效率低,占用記憶體小)。所謂懶載入,寫的是其get方法.

注意:如果是懶載入的話則一定要注意先判斷是否已經有了,如果沒有那麼再去進行alloc init

2.我們知道ios裝置的記憶體有限,如果在程式在啟動後就一次性載入將來會用到的所有資源,那麼就有可能會耗盡ios裝置的記憶體。這些資源例如大量資料,,音訊等等

下面舉個例子:

1> 定義控制項屬性,注意:屬性必須是strong的,示例**如下:

@property (nonatomic, strong) uiimageview *icon;

@property (nonatomic, strong) uibutton *nextbtn;

@property (nonatomic, strong) nsarray *imagelist;

2> 在屬性的getter方法中實現懶載入,示例**如下:

// 懶載入-在需要的時候,再例項化載入到記憶體中

/***控制項的延遲載入 ***/

-(uiimageview *)icon

//判斷是否已經有了,若沒有,則進行例項化

if (!_icon) {

_icon=[[uiimageview alloc]initwithframe:cgrectmake(x, y, w, h)];

uiimage *image=[uiimage imagenamed:@"icon"];

_icon.image=image;

[self.view addsubview:_icon];

return _icon;

/***按鈕的延遲載入 ***/

-(uibutton *)nextbtn

//判斷是否已經有了,若沒有,則進行例項化

if (!_nextbtn) {

_nextbtn=[uibutton buttonwithtype:uibuttontypecustom];

_nextbtn.frame=cgrectmake(0, self.view.center.y, 40, 40);

[_nextbtn setbackgroundimage:[uiimage imagenamed:@"normal"] forstate:uicontrolstatenormal];

[_nextbtn setbackgroundimage:[uiimage imagenamed:@"highlighted"] forstate:uicontrolstatehighlighted];

[self.view addsubview:_nextbtn];

[_nextbtn addtarget:self action:@selector(nextclick:) forcontrolevents:uicontroleventtouchupinside];

return _nextbtn;

/*** array的get方法 ***/

- (nsarray *)imagelist{

// 只有第一次呼叫getter方法時,為空,此時例項化並建立陣列

if (_imagelist == nil) {

// file表示從檔案的完整路徑載入檔案

nsstring *path = [[nsbundle mainbundle] pathforresource:@"imagedata" oftype:@"plist"];

_imagelist = [nsarray arraywithcontentsoffile:path];

return _imagelist;

如上面的**,有乙個_imagelist屬性,如果在程式的**中,有多次訪問_imagelist屬性,例如下面

self.imagelist ;self.imagelist ;self.imagelist ;

雖然訪問了3次_imagelist 屬性,但是當第一次訪問了imagelist屬相,imagelist陣列就不為空,

當第二次訪問imagelist 時  imagelist != nil,就不會再次在plist檔案中載入資料了。

3. 使用懶載入的好處:

(1)不必將建立物件的**全部寫在viewdidload方法中,**的可讀性更強

(2)每個控制項的getter方法中分別負責各自的例項化處理,**彼此之間的獨立性強,松耦合

(3) 只有當真正需要資源時,再去載入,節省了記憶體資源。

感謝: chengfang

ios開發—懶載入

1.懶載入——也稱為延遲載入,即在需要的時候才載入(效率低,占用記憶體小)。所謂懶載入,寫的是其get方法.

注意:如果是懶載入的話則一定要注意先判斷是否已經有了,如果沒有那麼再去進行alloc init

2.我們知道ios裝置的記憶體有限,如果在程式在啟動後就一次性載入將來會用到的所有資源,那麼就有可能會耗盡ios裝置的記憶體。這些資源例如大量資料,,音訊等等

下面舉個例子:

1> 定義控制項屬性,注意:屬性必須是strong的,示例**如下:

@property (nonatomic, strong) uiimageview *icon;

@property (nonatomic, strong) uibutton *nextbtn;

@property (nonatomic, strong) nsarray *imagelist;

2> 在屬性的getter方法中實現懶載入,示例**如下:

// 懶載入-在需要的時候,再例項化載入到記憶體中

/***控制項的延遲載入 ***/

-(uiimageview *)icon

//判斷是否已經有了,若沒有,則進行例項化

if (!_icon) {

_icon=[[uiimageview alloc]initwithframe:cgrectmake(x, y, w, h)];

uiimage *image=[uiimage imagenamed:@"icon"];

_icon.image=image;

[self.view addsubview:_icon];

return _icon;

/***按鈕的延遲載入 ***/

-(uibutton *)nextbtn

//判斷是否已經有了,若沒有,則進行例項化

if (!_nextbtn) {

_nextbtn=[uibutton buttonwithtype:uibuttontypecustom];

_nextbtn.frame=cgrectmake(0, self.view.center.y, 40, 40);

[_nextbtn setbackgroundimage:[uiimage imagenamed:@"normal"] forstate:uicontrolstatenormal];

[_nextbtn setbackgroundimage:[uiimage imagenamed:@"highlighted"] forstate:uicontrolstatehighlighted];

[self.view addsubview:_nextbtn];

[_nextbtn addtarget:self action:@selector(nextclick:) forcontrolevents:uicontroleventtouchupinside];

return _nextbtn;

/*** array的get方法 ***/

- (nsarray *)imagelist{

// 只有第一次呼叫getter方法時,為空,此時例項化並建立陣列

if (_imagelist == nil) {

// file表示從檔案的完整路徑載入檔案

nsstring *path = [[nsbundle mainbundle] pathforresource:@"imagedata" oftype:@"plist"];

_imagelist = [nsarray arraywithcontentsoffile:path];

return _imagelist;

如上面的**,有乙個_imagelist屬性,如果在程式的**中,有多次訪問_imagelist屬性,例如下面

self.imagelist ;self.imagelist ;self.imagelist ;

雖然訪問了3次_imagelist 屬性,但是當第一次訪問了imagelist屬相,imagelist陣列就不為空,

當第二次訪問imagelist 時  imagelist != nil,就不會再次在plist檔案中載入資料了。

3. 使用懶載入的好處:

(1)不必將建立物件的**全部寫在viewdidload方法中,**的可讀性更強

(2)每個控制項的getter方法中分別負責各自的例項化處理,**彼此之間的獨立性強,松耦合

(3) 只有當真正需要資源時,再去載入,節省了記憶體資源。

iOS懶載入模式

懶載入 概念 所謂懶載入是乙個物件徐濤建立時才會被建立,不需要建立時不被建立 使用場景 ios中的uitableview就用到了懶載入,tableviewcell原生元件在宣告getting方法時,ps imageview屬性,textlable屬性,detailtextlabel屬性 readon...

IOS 懶載入模式

ios開發 懶載入 1.懶載入 也稱為延遲載入,即在需要的時候才載入 效率低,占用記憶體小 所謂懶載入,寫的是其get方法.注意 如果是懶載入的話則一定要注意先判斷是否已經有了,如果沒有那麼再去進行alloc init 2.我們知道ios裝置的記憶體有限,如果在程式在啟動後就一次性載入將來會用到的所...

懶載入模式

命令列建立資料庫 mysql uroot p create database charset utf8 資料遷移 flask migrate 官方鏈結 安裝 pip install flask magrate manage.py db migrate message 更新了xx python man...