初步寫一些自己對於lazyload的看法吧。這篇文章主要針對普通view,對於image相關的的懶加載,准備過幾天研究一下在寫。
懶加載,又稱為延遲加載。通常用法,你有一個UITextField類型的property,簡單定義為userNameTextField,但是你不在初始化方法裡為其alloc/init,它就只是一個指針,不會占用內存。
只是加載到你預想加載到的View上。如:[self addSubview:self.userNameTextField];//其中self為view,.userNameTextField為你聲明的屬性名字。
顯而易見的是,以上的指定是在view初始化的時候完成的。
另外最重要的一點是,上面在空加載的時候,一定要使用點語法,也就是咱們所說的getter方法。
然後呢?就需要我們重寫userNameTextField的getter方法了。重寫方法:
- (UITextField *)userNameTextField
{
IF(_userNameTextField == nil){
_userNameTextField =[ [UITextField alloc]initWithFrame:CGRectMakeZero];
_userNameTextField.borderStyle = ...//在訪問器裡判斷此property的指針是否為空,若為空,就alloc/init,這時才真正生成這個對象
}
return _userNameTextField;
}
最後建議大家將Frame的設置寫到layoutSubviews之中,代碼如下
- (void)layoutSubviews
{
__userNameTextField.frame = .....
}
最終達到的效果就是,除非這個對象被使用,否則它永遠不會真正生成,也就不會占用內存。
其他LazyLoad的思想都是這樣:拖到最後一刻,萬不得已了,才開始占用資源,這在iPhone這種內存較少的設備上是很有必要的。