周末閑來無事,想談談自己開發中的一些淺認識。最近看自己以前寫的代碼,大量的UI初始化寫在視圖加載viewDidLoad方法中,這顯然是不規范和不專業的。寫出高質量優美的代碼,應該是一個進階程序員的共同追求,今天首先想談談在UI加載優化中經常用到的iOS懶加載。
1、iOS懶加載定義
在iOS5之前需要使用編譯器指令@synthesize告訴編譯器幫助生成屬性的getter,setter方法。之后會默認生成。編譯器在生成getter,setter方法時先檢查有沒有自定義getter,setter方法,如果有則使用自定義的,沒有定義系統就默認生成。
懶加載可以定義為:延時加載,即當對象需要用到的時候再去加載。其實就是重寫屬性的getter方法,然后加一個判斷,為空則賦值,不為空則返回。
#import "testViewController.h"
@interface ViewController ()
@property (nonatomic, strong) UIView *testView;
@end
@implementation ViewController
- (void)viewDidLoad {
[super viewDidLoad];
[self.view addSubview:self. testView]; //注意:一定要是self.testView,如果是_testView子視圖會為nil
}
// 懶加載
-(UIView *) testView {
if (_testView == nil) {
_testView = [[UIView alloc] initWithFrame:CGRectMake(0, 0, self.view.frame.size.width, 30)];
_testView.backgroundColor = [UIColor redColor];
}
return _testView;
}
@end
2、iOS懶加載注意事項
1)、重寫getter方法時,先判斷對象當前是否為空,為空的話再去實例化對象;
2)、當使用self. testView會調用testView的getter方法而_ testView并不會調用,正確的使用個方式是通過self. testView去調用才會執行懶加載方法。
很多初學者在懶加載定義之外區域調用懶加載變量時,不怎么注意self. testView 和 _ testView的區別,一直使用_testView,所以才導致懶加載方法一直沒有被調用。原因分析:self. testView會調用類的getter方法,而如果直接用_testView只是直接訪問類的實例變量,而不會調用getter方法了。
3、iOS懶加載的優點
1)、對系統的內存占用率會減小;
2)、對象的實例化在getter方法中,各司其職,降低耦合性;
3)、不需將對象的實例化寫到viewDidLoad,可以簡化代碼。