懒加载——也称为延迟加载,即在需要的时候才加载(效率低,占用内存小)。所谓懒加载,其实是重写getter方法.

注意:如果是懒加载的话则一定要注意先判断是否已经有了,如果没有那么再去进行实例化

使用懒加载的好处:

(1)不必将创建对象的代码全部写在viewDidLoad方法中,代码的可读性更强

(2)每个控件的getter方法中分别负责各自的实例化处理,代码彼此之间的独立性强,松耦合

代码示例:

//需求:创建自定义的cell,包含头像,姓名,电话,和拨打电话按钮.

//重写cell的初始化方法


- (instancetype)initWithStyle:(UITableViewCellStyle)style reuseIdentifier:(NSString *)reuseIdentifier {
self = [super initWithStyle:style reuseIdentifier:reuseIdentifier];
if (self) {
//添加子控件
[self.contentView addSubview:self.avaterView];
[self.contentView addSubview:self.nameLabel];
[self.contentView addSubview:self.phoneLabel];
[self.contentView addSubview:self.callBtn];
}
return self;
} #pragma mark - 懒加载,重写getter方法
//布局子控件
- (UIImageView *)avaterView {
if (!_avaterView) {
self.avaterView = [[[UIImageView alloc] initWithFrame:CGRectMake(, , , )] autorelease];
self.avaterView.layer.cornerRadius = ;  //设置圆角
self.avaterView.layer.masksToBounds = YES; //将超出部分裁剪掉.(默认不会裁掉,因此圆角效果不会出现)
}
return [[_avaterView retain] autorelease];  //安全处理
} - (UILabel *)nameLabel {
if (!_nameLabel) {
self.nameLabel = [[[UILabel alloc] initWithFrame:CGRectMake(, , , )] autorelease];
self.nameLabel.textColor = [UIColor blackColor];
}
return [[_nameLabel retain] autorelease];
} - (UILabel *)phoneLabel {
if (!_phoneLabel) {
self.phoneLabel = [[[UILabel alloc] initWithFrame:CGRectMake(, , , )] autorelease];
self.phoneLabel.textColor = [UIColor grayColor];
}
return [[_phoneLabel retain] autorelease];
} - (UIButton *)callBtn {
if (!_callBtn) {
self.callBtn = [UIButton buttonWithType:UIButtonTypeCustom];
self.callBtn.frame = CGRectMake(, , , );
[self.callBtn addTarget:self action:@selector(handleCall:) forControlEvents:UIControlEventTouchUpInside];
[_callBtn setImage:[UIImage imageNamed:@"action_call"] forState:UIControlStateNormal];
}
return [[_callBtn retain] autorelease];
}

iOS学习之懒加载的更多相关文章

  1. iOS设计模式之懒加载

    一.为什么要懒加载? 答: iPhone设备内存有限,如果在程序在启动后就一次性加载将来会用到的所有资源,那么久可能会耗尽iOS设备的内存.这些资源例如大量的数据,图片,音频,过多的控件等. 二.懒加 ...

  2. 使用objc runtime实现iOS绿色的懒加载

    使用objc runtime实现懒加载 地址:AutoPropertyCocoa 本文所指懒加载形式如下 - (id)lazyloadProperty{ if(_lazyloadProperty == ...

  3. iOS开发中懒加载的使用和限制

    1.在开发过程中很多时候,很多控件和对象需要alloc为了,提高开发效率使得懒加载得以产生. 2.下边用代码解释: - (NSMutableArray *)newsArr{ if (!_newsArr ...

  4. [UIKit学习]06.懒加载,模型,自定义代码段,重写构造方法

    懒加载 在get中加载,且只加载一次 - (NSArray *)shops { if (_shops == nil) { NSString *file = [[NSBundle mainBundle] ...

  5. iOS学习之视图加载过程中会触发的方法(loadView/viewDidLoad/didReceiveMemoryWarning)

    1.loadView 这是视图控制器用来加载根视图的方法; 如果需要将自定义的视图作为根视图,则不需要调用父类对该方法的实现([super loadView]);直接将自定义视图通过self.view ...

  6. ios 懒加载详解

    iOS开发之懒加载 在iOS开发中几乎经常用到懒加载技术,比如我们存放网络数据的数组,控制器的view,控件的自定义,复杂的运算逻辑等等情况下都会用到懒加载技术,那么什么是懒加载呢?? 他又有什么样的 ...

  7. Vue-Router学习第二弹动态路由\懒加载\嵌套路由

    在我们做项目时肯定会有出现动态路由: 举个栗子: 一个品种的商品页面会有同类不同样的商品就要在路由的后面加一个id: Vue的路由id是这样添加的: 两种动态路由 一种是params参数添加: 首先现 ...

  8. 【IOS学习基础】weak和strong、懒加载、循环引用

    一.weak和strong 1.理解 刚开始学UI的时候,对于weak和strong的描述看得最多的就是“由ARC引入,weak相当于OC中的assign,但是weak用于修饰对象,但是他们都不会造成 ...

  9. iOS 开发UI篇 -- 懒加载学习

    1. 懒加载基本 懒加载--也称为延迟加载,即在需要的时候才加载( 效率低,占用内存小).所谓懒加载,写的是其get方法. 注意:如果是懒加载的话则一定要注意先判断是否已经有了,如果没有那么再去进行实 ...

随机推荐

  1. ural 1640 Circle of Winter

    这道题真的很无聊,就是找一个圆,至少有一个点在这个圆上,其他点不能在圆外,半径不定: #include <cstdio> #include <cstring> #include ...

  2. dos命令弹出对话框---Msg命令详解

    标签: dos批处理对话框 2015-11-12 17:20 497人阅读 评论(0) 收藏 举报 脚本(30)  版权声明:本文为博主原创文章,未经博主允许不得转载. dos命令弹出对话框---Ms ...

  3. 【细说Java】揭开Java的main方法神秘的面纱

    大家都知道,main方法是Java应用程序的入口,其定义格式为: public static void main(String[] args) 可是为什么要这么定义呢?不这样定义可以么?main方法可 ...

  4. DLL模块:extern "C"的简单解析

    1.揭密extern "C" extern "C"包含双重含义,从字面上即可得到:首先,被它修饰的目标是 "extern”的:其次,被它修饰的目标是 ...

  5. char和int的转换

    import java.util.Scanner; public class test7 { public static void main(String[] args) { // TODO Auto ...

  6. WingIDE注册破解方法

    WingIDE是Python程序语言设计的集成开发环境,具有语法标签高亮显示,命令自动完成和函数跳转列表等非常强大的功能.本文主要介绍WingIDE 5安装及注册破解方法. 1. WingIDE 5下 ...

  7. SUBTOTAL 函数与所在行

    SUBTOTAL 函数与所在行 设计要点:数据汇总.隐藏.筛选 阿金:给你推荐一个函数SUBTOTAL. 秀秀:又是函数!俺不喜欢. 阿金:虽然你不喜欢函数,但是你也离不了啊,比如汇总. 秀秀:那倒是 ...

  8. MyEclipse 8.0注冊码+原版下载_Java开发软件

    MyEclipse是一个十分优秀的用于开发Java, J2EE的Eclipse插件集合,MyEclipse的功能很强大,支持也十分广泛,尤其是对各种开元产品的支持十分不错.MyEclipse眼下支持J ...

  9. 怎么给iOS项目打包

    1  首先要选中项目中的真机測试,不要模拟器 ,然后从上边的菜单条中找product watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvc29tZXJhaW43 ...

  10. [Angular 2] Refactoring mutations to enforce immutable data in Angular 2

    When a Todo property updates, you still must create a new Array of Todos and assign a new reference. ...