一.为什么要懒加载?
答: 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(, , , )];
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(, , , )];
self.textField.borderStyle = UITextBorderStyleRoundedRect;
self.textField.clearButtonMode = UITextFieldViewModeWhileEditing;
self.textField.placeholder = @"hehe";
}
return _textField;
}
@end

iOS-设计模式-懒加载的更多相关文章

  1. [IOS 开发] 懒加载 (延迟加载) 的基本方式,好处,代码示例

    懒加载的好处: 1> 不必将创建对象的代码全部写在viewDidLoad方法中,代码的可读性更强 2> 每个属性的getter方法中分别负责各自的实例化处理,代码彼此之间的独立性强,松耦合 ...

  2. iOS中懒加载

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

  3. iOS wkwebview懒加载中遇到的问题

    这是我遇到的问题,也许是个例,就算狗血了点吧 需求: 当前界面(mainVC)响应点击事件,传值给webviewController(webVC)其中包含网址,此时如果在webVC中对wkwebvie ...

  4. iOS 懒加载模式

    感谢: chengfang iOS开发-懒加载 1.懒加载--也称为延迟加载,即在需要的时候才加载(效率低,占用内存小).所谓懒加载,写的是其get方法. 注意:如果是懒加载的话则一定要注意先判断是否 ...

  5. iOS设计模式之懒加载

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

  6. iOS之weak和strong、懒加载及循环引用

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

  7. iOS开发UI篇—懒加载

    iOS开发UI篇—懒加载 1.懒加载基本 懒加载——也称为延迟加载,即在需要的时候才加载(效率低,占用内存小).所谓懒加载,写的是其get方法. 注意:如果是懒加载的话则一定要注意先判断是否已经有了, ...

  8. iOS开发UI中懒加载的使用方法

    1.懒加载基本 懒加载——也称为延迟加载,即在需要的时候才加载(效率低,占用内存小).所谓懒加载,写的是其getter方法.说的通俗一点,就是在开发中,当程序中需要利用的资源时.在程序启动的时候不加载 ...

  9. iOS 开发——实用技术Swift篇&Swift 懒加载(lazy)

    Swift 懒加载(lazy) 在程序设计中,我们经常会使用 * 懒加载 * ,顾名思义,就是用到的时候再开辟空间,比如iOS开发中的最常用控件UITableView,实现数据源方法的时候,通常我们都 ...

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

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

随机推荐

  1. Java 命名空间的由来和引入

    名字可视性(Name visibility) 名字管理对任何程序设计语言来说,都是一个重要问题.如果你在程序的某个模块里使用了 一个名字,而其他人在这个程序的另一个模块里也使用了相同的名字,那么怎样才 ...

  2. Entity Framework 6.x Code Frist For Oracle 实践与注意点

    Entity Framework 6.x Code Frist For Oracle 实践与注意点 开发环境 Visual Studio.net 2015/2017 Oracle 11g/12c 数据 ...

  3. 完美解决 向UILable 文字最后插入N张图片,支持向限制行数的UILable 最后一行插入,多余文字显示...

    效果: ====直接上代码吧=== // // UILabel+StringFrame.h // QYER // // Created by qyer on 15/3/19. // Copyright ...

  4. 导出Redis某个列表所有数据的语句

     echo "smembers done:www.huaihua.gov.cn" | redis-cli -h 127.0.0.1  >> /home/dz/fkw.d ...

  5. 分布式代码管理 tortoisehg mercurial

    下载客户端:            https://bitbucket.org/tortoisehg/files/downloads mercurial客户端下载:http://mercurial.s ...

  6. WebSocket桌面客户端工具

    考虑到WebSocket的诸多优点和未来的趋势,去年底把服务端通讯全部由HTTP改成WebSocket,期间为了方便测试,做了这个小工具.共享出来以方便有同样需求的程序员. 下载的压缩包里含有源代码和 ...

  7. Codeforces Round #382 (Div. 2)C. Tennis Championship 动态规划

    C. Tennis Championship 题目链接 http://codeforces.com/contest/735/problem/C 题面 Famous Brazil city Rio de ...

  8. 让Mac也能拥有apt-get类似的功能——Brew

    之前一直怀念ubuntu下的apt-get,因为实在是方便,需要安装什么,一个命令搞定,相关的依赖包统统由apt-get维护.下载,编译,安装,那叫一个痛快.什么软件用着不爽,一个命令卸载! 怀念ap ...

  9. AngularJs解决方案笔记(1)

    接触AngularJs约1年半时间,目前用其独立完成了一个Solution, 构建出比较完整的项目架构,从C/S往B/S转型的过程背后是大量精力与时间成本的付出,特别是工作了好几年后, 本来掌握好的稳 ...

  10. [leetcode]Excel Sheet Column Number

    26进制 class Solution { public: int titleToNumber(string s) { ; ; i < s.size(); i++) { n = n * + s[ ...