工作记录一:IOS中的懒加载lazyLoad

镔哥哥,初步写一些自己对于lazyload的看法。这篇文章主要针对普通view,的的懒加载,以及一些相关介绍。

懒加载,又称为延迟加载。通常用法,你有一个UITextField类型的property,简单定义为myuserNameTextField,但是你不在初始化方法里为其alloc/init,它就只是一个指针,不会占用内存。

只是加载到你预想加载到的View上。如:[self addSubview:self.myuserNameTextField];//其中self为view,.userNameTextField为你声明的属性名字。

显而易见的是,以上的指定是在view初始化的时候完成的。

另外最重要的一点是,上面在空加载的时候,一定要使用点语法,也就是咱们所说的getter方法

然后呢?

1:就需要我们重写userNameTextField的getter方法了。重写方法:

- (UITextField *)myuserNameTextField//这就是懒加载(用到的时候才去调用,在本地存储,数据请求的时候经常用到)

{

IF(_myuserNameTextField == nil){

_myuserNameTextField =[ [UITextField alloc]initWithFrame:CGRectMakeZero];

_myuserNameTextField.borderStyle = ...//在访问器里判断此property的指针是否为空,若为空,就alloc/init,这时才真正生成这个对象

}

return _userNameTextField;

}

2:最后建议大家将Frame的设置写到layoutSubviews之中,代码如下

- (void)layoutSubviews

{

__userNameTextField.frame = .....

}

镔哥哥为了大家更容易理解为什么要调用layoutSubview,专门写了相关的介绍,方便大家理解:

layoutSubviews在以下情况下会被调用: 


1、init初始化不会触发layoutSubviews 
2、addSubview会触发layoutSubviews 
3、设置view的Frame会触发layoutSubviews,当然前提是frame的值设置前后发生了变化 
4、滚动一个UIScrollView会触发layoutSubviews 
5、旋转Screen会触发父UIView上的layoutSubviews事件 
6、改变一个UIView大小的时候也会触发父UIView上的layoutSubviews事件 

最终达到的效果就是,除非这个对象被使用,否则它永远不会真正生成,也就不会占用内存。

 

记住:其他LazyLoad的思想都是这样:拖到最后一刻,万不得已了,才开始占用资源,这在iPhone这种内存较少的设备上是很有必要的。


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值