iOS開發UI篇—使用嵌套模型完成的一個簡單汽車圖標展現程序

iOS開發UI篇—使用嵌套模型完成的一個簡單汽車圖標展現程序數組

1、plist文件和項目結構圖緩存

說明:這是一個嵌套模型的示例性能優化

2、代碼示例:app

 YYcarsgroup.h文件代碼:ide

複製代碼

//
// YYcarsgroup.h
// 07-汽車展現(高級)
//
// Created by apple on 14-5-28.
// Copyright (c) 2014年 itcase. All rights reserved.
//性能

#import <Foundation/Foundation.h>優化

@interface YYcarsgroup : NSObject
@property(nonatomic,copy)NSString *title;
@property(nonatomic,strong)NSArray *cars;atom

-(instancetype)initWithDict:(NSDictionary *)dict;
+(instancetype)carsgroupWithDict:(NSDictionary *)dict;
@endspa

複製代碼

YYcarsgroup.m文件代碼:3d

複製代碼

//
// YYcarsgroup.m
// 07-汽車展現(高級)
//
// Created by apple on 14-5-28.
// Copyright (c) 2014年 itcase. All rights reserved.
//

#import "YYcarsgroup.h"
#import "YYcars.h"

@implementation YYcarsgroup
-(instancetype)initWithDict:(NSDictionary *)dict
{
if (self=[super init]) {
//嵌套的字典轉模型
self.title=dict[@"title"];

//注意
NSArray *dictcars=dict[@"cars"];
//像下面這樣寫能夠提升性能
NSMutableArray *arrayM=[NSMutableArray arrayWithCapacity:dictcars.count];
for (NSDictionary *dict in dictcars) {
YYcars *yycars=[[YYcars alloc]initWithDict:dict];
[arrayM addObject:yycars];
}
// 賦值存儲模型的數組給屬性
self.cars=arrayM;
}
return self;
}

+(instancetype)carsgroupWithDict:(NSDictionary *)dict
{
return [[self alloc]initWithDict:dict];
}
@end

 
 
複製代碼

YYcars.h文件

複製代碼

//
// YYcars.h
// 07-汽車展現(高級)
//
// Created by apple on 14-5-28.
// Copyright (c) 2014年 itcase. All rights reserved.
//

#import <Foundation/Foundation.h>

@interface YYcars : NSObject
@property(nonatomic,copy)NSString *name;
@property(nonatomic,copy)NSString *icon;

-(instancetype)initWithDict:(NSDictionary *)dict;
+(instancetype)carsWithDict:(NSDictionary *)dict;
@end

 
 
複製代碼

 YYcars.m文件

複製代碼

//
// YYcars.m
// 07-汽車展現(高級)
//
// Created by apple on 14-5-28.
// Copyright (c) 2014年 itcase. All rights reserved.
//

#import "YYcars.h"

@implementation YYcars

-(instancetype)initWithDict:(NSDictionary *)dict
{
if (self=[super init]) {
self.name=dict[@"name"];
self.icon=dict[@"icon"];
}
return self;
}
+(instancetype)carsWithDict:(NSDictionary *)dict
{
return [[self alloc]initWithDict:dict];
}
@end

 
 
複製代碼

YYViewController.m文件

複製代碼

//
// YYViewController.m
// 07-汽車展現(高級)
//
// Created by apple on 14-5-28.
// Copyright (c) 2014年 itcase. All rights reserved.
//

#import "YYViewController.h"
#import "YYcarsgroup.h"
#import "YYcars.h"

@interface YYViewController ()<UITableViewDataSource>
@property (strong, nonatomic) IBOutlet UITableView *tableview;
@property(nonatomic,strong) NSArray *car;
@end

@implementation YYViewController

- (void)viewDidLoad
{
[super viewDidLoad];

self.tableview.rowHeight=60.f;
self.tableview.dataSource=self;
NSLog(@"%d",self.car.count);
}
#pragma mark- 實現懶加載
//1.從包中讀取數據
//2.字典轉模型
//3.返回cars
-(NSArray *)car
{
if (_car==nil) {

NSString *fullpath= [[NSBundle mainBundle]pathForResource:@"cars_total.plist" ofType:nil];
NSArray *arrayM=[NSArray arrayWithContentsOfFile:fullpath];

NSMutableArray *carsarray=[NSMutableArray array];
for (NSDictionary *dict in arrayM) {
YYcarsgroup *carsgroup=[YYcarsgroup carsgroupWithDict:dict];
[carsarray addObject:carsgroup];
}
_car=[carsarray copy];
}
return _car;
}


#pragma mark- 實現tableview的數據展現
//1.設置數據源,遵照協議
//2.返回組
//3.返回行
//4.每組每行對應的數據
//4.1去緩存中去取cell
//4.2若沒有,則建立cell,並蓋章
//4.3設置cell的數據
//4.4返回cell

-(NSInteger)numberOfSectionsInTableView:(UITableView *)tableView
{
return self.car.count;
}
-(NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section
{
YYcarsgroup *carsgroup=self.car[section];
return carsgroup.cars.count;
}
-(UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
{
static NSString *identifier=@"car";
//4.1去緩存中去取cell
UITableViewCell *cell=[tableView dequeueReusableCellWithIdentifier:identifier];
//4.2若沒有,則建立cell,並蓋章
if (cell==nil) {
cell=[[UITableViewCell alloc]initWithStyle:UITableViewCellStyleDefault reuseIdentifier:identifier];
}
//4.3設置cell的數據
//設置對應的組
YYcarsgroup *carsgroup=self.car[indexPath.section];
//設置對應的行
YYcars *yycars=carsgroup.cars[indexPath.row];

cell.imageView.image=[UIImage imageNamed:yycars.icon];
cell.textLabel.text=yycars.name;
//4.4返回cell
return cell;
}

//設置每組的標題
-(NSString *)tableView:(UITableView *)tableView titleForHeaderInSection:(NSInteger)section
{
YYcarsgroup *carsgroup=self.car[section];
return carsgroup.title;
}

//設置索引
-(NSArray *)sectionIndexTitlesForTableView:(UITableView *)tableView
{
//利用kvc取出全部的標題
NSArray *title=[self.car valueForKeyPath:@"title"];
return title;
}

//隱藏狀態欄
-(BOOL)prefersStatusBarHidden
{
return YES;
}
@end

複製代碼

實現效果:

3、注意點

1.設置索引

代碼以下:

複製代碼

//設置索引
-(NSArray *)sectionIndexTitlesForTableView:(UITableView *)tableView
{
//利用kvc取出全部的標題
NSArray *title=[self.car valueForKeyPath:@"title"];
return title;
}

複製代碼

2.cell的性能優化

代碼以下:

複製代碼

static NSString *identifier=@"car";
//4.1去緩存中去取cell
UITableViewCell *cell=[tableView dequeueReusableCellWithIdentifier:identifier];
//4.2若沒有,則建立cell,並蓋章
if (cell==nil) {
cell=[[UITableViewCell alloc]initWithStyle:UITableViewCellStyleDefault reuseIdentifier:identifier];
}

 
 
複製代碼

請注意:cell內部數據處理的細節。(如何節省內存?)

相關文章
相關標籤/搜索