iOS開發UI篇—懶載入

iOS開發UI篇—懶載入

1.懶載入基本

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

注意:假設是懶載入的話則一定要注意先推斷是否已經有了。假設沒有那么再去進行實例化

2.使用懶載入的優點:

(1)不必將創建對象的代碼所有寫在viewDidLoad方法中,代碼的可讀性更強

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

3.代碼演示樣例


  1 //
  2 //  YYViewController.m
  3 //  03-圖片瀏覽器初步
  4 //
  5 //  Created by apple on 14-5-21.
  6 //  Copyright (c) 2014年 itcase. All rights reserved.
  7 //
  8 
  9 #import "YYViewController.h"
 10 
 11 #define POTOIMGW    200
 12 #define POTOIMGH    300
 13 #define POTOIMGX    60
 14 #define  POTOIMGY    50
 15 
 16 @interface YYViewController ()
 17 
 18 @property(nonatomic,strong)UILabel *firstlab;
 19 @property(nonatomic,strong)UILabel *lastlab;
 20 @property(nonatomic,strong)UIImageView *icon;
 21 @property(nonatomic,strong)UIButton *leftbtn;
 22 @property(nonatomic,strong)UIButton *rightbtn;
 23 @property(nonatomic,strong)NSArray *array;
 24 @property(nonatomic ,assign)int i;
 25 -(void)change;
 26 @end
 27 
 28 
 29 
 30 @implementation YYViewController
 31 
 32 - (void)viewDidLoad
 33 {
 34     [super viewDidLoad];
 35     [self change];
 36 }
 37 
 38 -(void)change
 39 {
 40     [self.firstlab setText:[NSString stringWithFormat:@"%d/5",self.i+1]];
 41     //先get再set
 42     
 43     self.icon.image=[UIImage imageNamed:self.array[self.i][@"name"]];
 44     self.lastlab.text=self.array[self.i][@"desc"];
 45   
 46     self.leftbtn.enabled=(self.i!=0);
 47     self.rightbtn.enabled=(self.i!=4);
 48 }
 49 
 50 //延遲載入
 51 /**1.圖片的序號標簽*/
 52 -(UILabel *)firstlab
 53 {
 54     //推斷是否已經有了,若沒有。則進行實例化
 55     if (!_firstlab) {
 56         _firstlab=[[UILabel alloc]initWithFrame:CGRectMake(20, 10, 300, 30)];
 57         [_firstlab setTextAlignment:NSTextAlignmentCenter];
 58         [self.view addSubview:_firstlab];
 59     }
 60     return _firstlab;
 61 }
 62 
 63 /**2.圖片控件的延遲載入*/
 64 -(UIImageView *)icon
 65 {
 66      //推斷是否已經有了,若沒有,則進行實例化
 67     if (!_icon) {
 68         _icon=[[UIImageView alloc]initWithFrame:CGRectMake(POTOIMGX, POTOIMGY, POTOIMGW, POTOIMGH)];
 69         UIImage *image=[UIImage imageNamed:@"biaoqingdi"];
 70         _icon.image=image;
 71         [self.view addSubview:_icon];
 72     }
 73     return _icon;
 74 }
 75 
 76 /**3.描寫敘述控件的延遲載入*/
 77 -(UILabel *)lastlab
 78 {
 79      //推斷是否已經有了。若沒有。則進行實例化
 80     if (!_lastlab) {
 81         _lastlab=[[UILabel alloc]initWithFrame:CGRectMake(20, 400, 300, 30)];
 82         [_lastlab setTextAlignment:NSTextAlignmentCenter];
 83         [self.view addSubview:_lastlab];
 84     }
 85     return _lastlab;
 86 }
 87 
 88 /**4.左鍵按鈕的延遲載入*/
 89 -(UIButton *)leftbtn
 90 {
 91      //推斷是否已經有了。若沒有。則進行實例化
 92     if (!_leftbtn) {
 93         _leftbtn=[UIButton buttonWithType:UIButtonTypeCustom];
 94         _leftbtn.frame=CGRectMake(0, self.view.center.y, 40, 40);
 95         [_leftbtn setBackgroundImage:[UIImage imageNamed:@"left_normal"] forState:UIControlStateNormal];
 96         [_leftbtn setBackgroundImage:[UIImage imageNamed:@"left_highlighted"] forState:UIControlStateHighlighted];
 97         [self.view addSubview:_leftbtn];
 98         [_leftbtn addTarget:self action:@selector(leftclick:) forControlEvents:UIControlEventTouchUpInside];
 99     }
100     return _leftbtn;
101 
102 }
103 
104 /**5.右鍵按鈕的延遲載入*/
105 -(UIButton *)rightbtn
106 {
107     if (!_rightbtn) {
108         _rightbtn=[UIButton buttonWithType:UIButtonTypeCustom];
109         _rightbtn.frame=CGRectMake(POTOIMGX+POTOIMGW+10, self.view.center.y, 40, 40);
110         [_rightbtn setBackgroundImage:[UIImage imageNamed:@"right_normal"] forState:UIControlStateNormal];
111         [_rightbtn setBackgroundImage:[UIImage imageNamed:@"right_highlighted"] forState:UIControlStateHighlighted];
112         [self.view addSubview:_rightbtn];
113         [_rightbtn addTarget:self action:@selector(rightclick:) forControlEvents:UIControlEventTouchUpInside];
114     }
115     return _rightbtn;
116 }
117 
118 //array的get方法
119 -(NSArray *)array
120 {
121     if (_array==nil) {
122         NSString *path=[[NSBundle mainBundle] pathForResource:@"data" ofType:@"plist"];
123         _array=[[NSArray alloc]initWithContentsOfFile:path];
124     }
125     return _array;
126 }
127 
128 -(void)rightclick:(UIButton *)btn
129 {
130     self.i++;
131     [self change];
132 }
133 
134 -(void)leftclick:(UIButton *)btn
135 {
136     self.i--;
137     [self change];
138 }
139 
140 @end

轉載于:https://www.cnblogs.com/brucemengbm/p/6791839.html

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/455791.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/455791.shtml
英文地址,請注明出處:http://en.pswp.cn/news/455791.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

python之虛擬環境

Virtualenv(虛擬環境) VirtualEnv用于在一臺機器上創建多個獨立的Python虛擬運行環境,多個Python環境相互獨立,互不影響.這樣有很多優點,寶寶們要記住哦,比如: 在沒有權限的情況下安裝新套件 不同應用可以使用不同的套件版本 套件升級不影響其他應用 …

【解決】subprocess.CalledProcessError: Command ‘(‘lsb_release‘, ‘-a‘)‘ returned non-zero exit status 127

pip list 報錯 Traceback (most recent call last):File "/home/sensetime/.pyenv/versions/3.6.5/bin/pip", line 11, in <module>sys.exit(main())File "/home/sensetime/.pyenv/versions/3.6.5/lib/python3.6/site-packages/pip/_internal/cli/main.p…

輸出四位完全平方數_完全平方數中的規律

PS&#xff1a;很近之前自己收集的資料一個正整數如果是另一個整數的完全平方&#xff0c;那么我們就稱這個數為完全平方數&#xff0c;也叫做平方數。如&#xff1a;0&#xff0c;1&#xff0c;4&#xff0c;9&#xff0c;16&#xff0c;25&#xff0c;36&#xff0c;49&#…

RTP格式圖 NNEXB格式和RTP格式

Dove(12337127) 10:15:45我看JM代碼里面有些疑問 看好多地方都出現了ANNEXB 時空互換(178316135) 10:16:08h264的2種碼流編碼格式Dove(12337127) 10:16:19我就不太理解是什么意思 剛才翻標準看見了 剛準備認真看看 Dove(12337127) 10:16:29annexb rtp 是么&#x…

第一階段沖刺第二天

昨天把以前寫過的Java普通用戶類和訂單類看了看&#xff0c;添加了一些變量 看了一些其他網頁的代碼 今天繼續寫關于收藏部分的代碼 遇到的困難&#xff1a;還是沒有什么頭緒&#xff0c;做不到真正的實現轉載于:https://www.cnblogs.com/lzxw/p/6800311.html

為企業提供本地銷售人員的Universal Avenue獲1000萬美元A輪融資

為各類B2B企業提供本地銷售人員的瑞典初創企業Universal Avenue近日獲得了1000萬美元的A輪融資。此輪融資由Eight Roads&#xff08;富達國際的投資機構&#xff09;領投&#xff0c;原有投資者Northzone和MOOR跟投&#xff0c;加上2015年獲得的500萬美元種子輪融資&#xff0c…

Python02期預科課程筆記索引

Python index day01 Python簡介 Python發展歷程 Python安裝以及版本檢測PyCharm的安裝和破解 day02 Python注釋及語句分類 Python命令方式和關鍵字Python中的變量Python的數據類型PyCharm中的快捷鍵 day03 Python數據類型轉換Python中的運算和運算符Python流程控制 day0…

【Linux分享】Linux常用命令+教程分享

今天分享分為兩部分 :) PART01 Linux常用命令分享/ PART02 關于BD面試經驗分享 30mins Linux Command: PART 1 你本可以張口就來..... 本篇內容分享的宗旨: 拿下Linux面試 別面試的時候呆呆地說個ls了&#x1f691; 本篇分享詳細地介紹了常用Linux指令的功能、語法、參…

萬能無線鼠標對碼軟件_400元就能買ROG無線游戲鼠標,ROG影刃2無線版使用體驗...

影刃2是ROG剛剛推出的一款新產品&#xff0c;定位入門游戲玩家。目前市面上定位入門游戲玩家的無線鼠標真不多&#xff0c;400塊以內的預算想要選購一款合適的無線游戲鼠標&#xff0c;選擇其實非常有限。 就ROG產品線而言&#xff0c;烈刃2的價格到了700塊錢&#xff1b;羅技G…

[轉帖]H.264 RTP payload 格式(有效載荷)

1. 網絡抽象層單元類型 (NALU)NALU 頭由一個字節組成, 它的語法如下:---------------|0|1|2|3|4|5|6|7|--------|F|NRI| Type |---------------F: 1 個比特.forbidden_zero_bit. 在 H.264 規范中規定了這一位必須為 0.NRI: 2 個比特.nal_ref_idc. 取 00 ~ 11, 似乎指示這個 NAL…

wampserver 虛擬主機

轉載&#xff1a;http://blog.csdn.net/knight_quan/article/details/51830683 1.背景&#xff1a; 在進行網站開發的時候&#xff0c;通常需要以http://localhost或者127.0.0.1等地址來訪問本地環境的網站。不過隨著開發項目的增多&#xff0c;需要每次先訪問localhost然后再選…

PL/SQL的結構

2019獨角獸企業重金招聘Python工程師標準>>> [DECLARE] --聲明開始關鍵字/*這里是聲明部分,包括PL/SQL中的變量、常量以及類型第等*/BEGIN --執行部分開始標志/*這里是執行部分,是整個PL/SQL塊的主體部分,該部分必須存在,可以是SQL語句或流程控制語句等…

cf方框透視易語言代碼怎么寫_易語言真的那么不入流嗎?

很多人鄙視易語言&#xff0c;為什么那么多人一提易語言&#xff0c;除了罵&#xff0c;還是罵&#xff0c;易語言很大錯誤嗎&#xff1f;知乎上的大神們是這么說的一個語言的“入流”&#xff0c;和是不是英文關鍵字無關&#xff0c;而是和這種語言進入某一子行業的契機有關。…

python發展歷程

作者&#xff1a;Vamei 出處&#xff1a;http://www.cnblogs.com/vamei 歡迎轉載&#xff0c;也請保留這段聲明。謝謝&#xff01; Python是我喜歡的語言&#xff0c;簡潔&#xff0c;優美&#xff0c;容易使用。前兩天&#xff0c;我很激昂的向朋友宣傳Python的好處。 聽過之…

【Django】RBAC權限管理系統模塊-理解

今天文章分為兩部分 :) PART1 RBAC權限管理內容分享/ PART2 關于字節跳動一面 10 Minutes Django-RBAC: PART 1 這權限管理系統主要功能是什么&#xff1f; 顧名思義&#xff0c;在系統中可以靈活的劃分角色組&#xff0c;可以根據功能特性來劃分&#xff1a;- 比如設置系…

NAL的基本特征

為了保證視頻流在不同傳輸環境中能有效地傳輸&#xff0c;單純的高壓縮率是不夠的&#xff0c;必須提供有效的方法&#xff0c;使視頻流能夠與傳輸協議無縫連接&#xff0c;才能應用到各種網絡。在以前的標準中&#xff0c;MPEG標準包含系統層&#xff0c;同時制定了H&#xff…

Linux使用circos

1.在conda中安裝bioconda conda install -c bioconda circos -y # 測試是否所有的module都安裝好了 circos -module # 所有都顯示OK則成功 ok 0.39 Font::TTF::Font ok 2.68 GD ok 0.2 GD::Polyline ... .... 2.檢查模塊是否齊全 circos -module 3.下…

下一步工作的一些思考和問題

前期PL和PS部分基本開發完成了&#xff0c;現在開始做界面交互集成的工作&#xff0c;總結一些思考和問題。 1&#xff0c;關于software cpu的計算時間&#xff0c;可能會比現在長。前期實驗時是裸跑程序&#xff0c;加入操作系統時&#xff0c;由于系統的多任務&#xff0c;PS…

python numpy教程_Python中的Numpy入門教程

這篇文章主要介紹了 Python 中的 Numpy 入門教程&#xff0c;著重講解了矩陣中的數組操作 , 需要的 朋友可以參考下 1 、 Numpy 是什么 很簡單&#xff0c; Numpy 是 Python 的一個科學計算的庫&#xff0c; 提供了矩陣運算的功能&#xff0c; 其一般與 Scipy 、 matplotlib 一…

jquery中的 jquery.contains(a,b)

jquery.contains(a,b) 判斷元素 a中是否包含 b 元素: 源碼: contains isNative(docElem.contains) || docElem.compareDocumentPosition ?function( a, b ) {var adown a.nodeType 9 ? a.documentElement : a,bup b && b.parentNode;return a bup || !!( bup &a…