懶載入的思想以及實現,懶載入思想實現

來源:互聯網
上載者:User

懶載入的思想以及實現,懶載入思想實現

  懶載入又叫消極式載入,他有兩個好處,第一:當使用時才載入,而不是一開始就載入,為CPU節省時間做其他的事情,第二:載入之前會判斷資料是否為空白,如果空是空的才去載入,避免了重複載入資料,系統可能會清理記憶體使數組為空白,這樣確保數組不為空白

  有時plist檔案不是一層可能兩層甚至多層,記住先建小模型,究竟如何?懶載入,下面以一個實際的例子為大家示範如何?懶載入,看的是實現的思想,而不是代碼。

 

//  CZCar.h

 

#import <Foundation/Foundation.h>

 

@interface CZCar : NSObject

 

 

/**

 * 圖片的名字

 */

@property (nonatomic,copy) NSString *icon;

 

 

/**

 * 代表汽車的品牌

 */

@property (nonatomic,copy) NSString *name;

 

 

 

/**

 *  執行個體化的對象方法

 *

 *  @param dict 傳入一個字典資料

 *

 *  @return 返回當前執行個體化對象

 */

- (instancetype)initWithDict:(NSDictionary *)dict;

 

/**

 *  執行個體化的類方法

 *

 *  @param dict 傳入一個字典資料

 *

 *  @return 返回當前執行個體化對象

 */

+ (instancetype)carWithDict:(NSDictionary *)dict;

 

 

/**

 *  類方法,根據傳入的plist檔案名稱,返回一個存放模型對象的數組

 *

 *  @param fileName 傳入一個plist檔案的檔案名稱

 *

 *  @return 存放模型對象的數組

 */

+ (NSArray *)carWithPlistName:(NSString *)fileName;

 

@end

 

 

 

//  CZCar.m

 

#import "CZCar.h"

 

@implementation CZCar

 

 

/**

 *  執行個體化的對象方法

 *

 *  @param dict 傳入一個字典資料

 *

 *  @return 返回當前執行個體化對象

 */

- (instancetype)initWithDict:(NSDictionary *)dict{

   

    //1. 初始化

    self = [super init];

    //2. 如果self存在,就載入資料

    if (self) {

        [self setValuesForKeysWithDictionary:dict];

    }

   

    //3. 返回對象

    return self;

   

}

 

/**

 *  執行個體化的類方法

 *

 *  @param dict 傳入一個字典資料

 *

 *  @return 返回當前執行個體化對象

 */

+ (instancetype)carWithDict:(NSDictionary *)dict{

    return [[self alloc]initWithDict:dict];

}

 

/**

 *  類方法,根據傳入的plist檔案名稱,返回一個存放模型對象的數組

 *

 *  @param fileName 傳入一個plist檔案的檔案名稱

 *

 *  @return 存放模型對象的數組

 */

+ (NSArray *)carWithPlistName:(NSString *)fileName{

   

    //1.載入資料

    NSArray *array = [NSArray arrayWithContentsOfFile:[[NSBundle mainBundle]pathForResource:fileName ofType:@"plist"]];

   

    //2.字典轉模型

    // 2.1 建立臨時的可變數組用來存放模型對象

    NSMutableArray *nmArray = [NSMutableArray array];

   

    //2.2 遍曆字典數組

    for (NSDictionary *dict in array) {

        //2.3 字典轉模型,同時添加到可變數組中

        [nmArray addObject:[self carWithDict:dict]];

    }

   

    //2.4 返回存放為模型對象的可變數組

    return nmArray;

   

   

}

 

@end

 

 

 

//  CZCarGroup.h

 

#import <Foundation/Foundation.h>

 

@interface CZCarGroup : NSObject

 

/**

 *  汽車的數組

 */

@property (nonatomic,strong) NSArray *cars;

 

 

/**

 * 索引標題

 */

@property (nonatomic,copy) NSString *title;

 

 

/**

 *  執行個體化的對象方法

 *

 *  @param dict 傳入一個字典資料

 *

 *  @return 返回當前執行個體化對象

 */

- (instancetype)initWithDict:(NSDictionary *)dict;

 

/**

 *  執行個體化的類方法

 *

 *  @param dict 傳入一個字典資料

 *

 *  @return 返回當前執行個體化對象

 */

+ (instancetype)carGroupWithDict:(NSDictionary *)dict;

 

 

/**

 *  類方法,根據傳入的plist檔案名稱,返回一個存放模型對象的數組

 *

 *  @param fileName 傳入一個plist檔案的檔案名稱

 *

 *  @return 存放模型對象的數組

 */

+ (NSArray *)carGroupWithPlistName:(NSString *)fileName;

 

 

@end

 

 //"CZCarGroup.m"

#import "CZCarGroup.h"

#import "CZCar.h"

 

@implementation CZCarGroup

 

 

 

 

- (void)setCars:(NSArray *)cars{

 

//    _cars = cars;

    //_cars 存放的就是字典資料

//    字典轉模型

    //1. 建立一個可變的數組

    NSMutableArray *nmArray = [NSMutableArray array];

   

    //2. 遍曆字典數組

    for (NSDictionary *dict in cars) {

        //3. 字典轉模型

        CZCar *car = [CZCar carWithDict:dict];

        //4. 將模型的對象添加到可變數組中

        [nmArray addObject:car];

       

    }

    //5. 將存放模型的數組賦值給字典數組

    _cars = nmArray;

   

//    NSLog(@"給cars設定資料");

 

}

 

 

/**

 *  執行個體化的對象方法

 *

 *  @param dict 傳入一個字典資料

 *

 *  @return 返回當前執行個體化對象

 */

- (instancetype)initWithDict:(NSDictionary *)dict{

   

    //1. 初始化

    self = [super init];

    //2. 如果self存在,就載入資料

    if (self) {

        //這裡通過KVC完成的字典轉模型

        [self setValuesForKeysWithDictionary:dict];

       

//        [self setValue:dict[@"title"] forKeyPath:@"title"];

//        [self setValue:dict[@"cars"] forKeyPath:@"cars"];

//       

//        self.cars = dict[@"cars"];

//       

//        [self setCars:dict[@"cars"]];

    }

   

    //3. 返回對象

    return self;

   

}

 

/**

 *  執行個體化的類方法

 *

 *  @param dict 傳入一個字典資料

 *

 *  @return 返回當前執行個體化對象

 */

+ (instancetype)carGroupWithDict:(NSDictionary *)dict{

    return [[self alloc]initWithDict:dict];

}

 

/**

 *  類方法,根據傳入的plist檔案名稱,返回一個存放模型對象的數組

 *

 *  @param fileName 傳入一個plist檔案的檔案名稱

 *

 *  @return 存放模型對象的數組

 */

+ (NSArray *)carGroupWithPlistName:(NSString *)fileName{

   

    //1.載入資料

    NSArray *array = [NSArray arrayWithContentsOfFile:[[NSBundle mainBundle]pathForResource:fileName ofType:@"plist"]];

   

    //2.字典轉模型

    // 2.1 建立臨時的可變數組用來存放模型對象

    NSMutableArray *nmArray = [NSMutableArray array];

   

    //2.2 遍曆字典數組

    for (NSDictionary *dict in array) {

        //2.3 字典轉模型,同時添加到可變數組中

        [nmArray addObject:[self carGroupWithDict:dict]];

    }

   

    //2.4 返回存放為模型對象的可變數組

    return nmArray;

   

   

}

 

 

@end

 

 

//

//  ViewController.m

 

#import "ViewController.h"

#import "CZCarGroup.h"

#import "CZCar.h"

 

@interface ViewController ()<UITableViewDataSource,UITableViewDelegate>

 

@property (nonatomic,strong) NSArray *carGroupArray;

 

@end

 

@implementation ViewController

//重寫carGroupArray的get方法實現懶載入- (NSArray *)carGroupArray{

 

    //判斷資料是否為Nil

    if(_carGroupArray == nil){

   

        //載入資料

        _carGroupArray = [CZCarGroup carGroupWithPlistName:@"cars_total"];

    }

   

    return _carGroupArray;

 

}

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.