码迷,mamicode.com
首页 > 其他好文 > 详细

源码-0203-cell的循环利用01

时间:2017-02-23 14:02:16      阅读:176      评论:0      收藏:0      [点我收藏+]

标签:count   范围   group   覆盖数   数组   control   循环   force   return   

 

 

 

//
//  ViewController.m
//  01-性能优化
#import "ViewController.h"

@interface ViewController () <UITableViewDataSource>

@end

@implementation ViewController

- (void)viewDidLoad {
    [super viewDidLoad];
    
    UITableView *tableView = [[UITableView alloc] initWithFrame:self.view.bounds style:UITableViewStyleGrouped];
//    tableView.frame = self.view.bounds;
    tableView.dataSource = self;
    // 行高
    tableView.rowHeight = 70;
    [self.view addSubview:tableView];
}

#pragma mark - <UITableViewDataSource>
- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section
{
    return 50;
}

/**
 *  什么时候调用:每当有一个cell进入视野范围内就会调用
 */
- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
{
    // 0.重用标识
    // 被static修饰的局部变量:只会初始化一次,在整个程序运行过程中,只有一份内存
    static NSString *ID = @"cell";
    
    // 1.先根据cell的标识去缓存池中查找可循环利用的cell
    UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:ID];
    
    // 2.如果cell为nil(缓存池找不到对应的cell)
    if (cell == nil) {
        cell = [[UITableViewCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:ID];
    }
    
    // 3.覆盖数据
    cell.textLabel.text = [NSString stringWithFormat:@"testdata - %zd", indexPath.row];
    
    return cell;
}
@end

 

//
//  ViewController.m
//  06-UITableView02-单组数据
#import "ViewController.h"
#import "XMGHero.h"

@interface ViewController () <UITableViewDataSource>
@property (weak, nonatomic) IBOutlet UITableView *tableView;
/** 英雄数据 */
@property (nonatomic, strong) NSArray *heroes;
@end

@implementation ViewController

- (NSArray *)heroes
{
    if (_heroes == nil) {
        // 加载plist中的字典数组
        NSString *path = [[NSBundle mainBundle] pathForResource:@"heroes.plist" ofType:nil];
        NSArray *dictArray = [NSArray arrayWithContentsOfFile:path];
        
        // 字典数组 -> 模型数组
        NSMutableArray *heroArray = [NSMutableArray array];
        for (NSDictionary *dict in dictArray) {
            XMGHero *hero = [XMGHero heroWithDict:dict];
            [heroArray addObject:hero];
        }
        
        _heroes = heroArray;
    }
    return _heroes;
}

// 定义重用标识
NSString *ID = @"hero";

- (void)viewDidLoad {
    [super viewDidLoad];
    
    // 注册某个标识对应的cell类型
    [self.tableView registerClass:[UITableViewCell class] forCellReuseIdentifier:ID];
}

#pragma mark - <UITableViewDataSource>
- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section
{
    return self.heroes.count;
}

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
{
    // 1.去缓存池中查找cell
    UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:ID];
    
    // 2.覆盖数据
    XMGHero *hero = self.heroes[indexPath.row];
    cell.textLabel.text = hero.name;
    cell.imageView.image = [UIImage imageNamed:hero.icon];
    cell.detailTextLabel.text = hero.intro;
    
    return cell;
}
@end

 

 

//
//  XMGHero.h
//  06-UITableView02-单组数据
#import <Foundation/Foundation.h>

@interface XMGHero : NSObject
/** 姓名 */
@property (nonatomic, strong) NSString *name;
/** 图标 */
@property (nonatomic, strong) NSString *icon;
/** 简介 */
@property (nonatomic, strong) NSString *intro;

+ (instancetype)heroWithDict:(NSDictionary *)dict;
@end
//
//  XMGHero.m
//  06-UITableView02-单组数据
#import "XMGHero.h"

@implementation XMGHero
+ (instancetype)heroWithDict:(NSDictionary *)dict
{
    XMGHero *hero = [[self alloc] init];
    hero.name = dict[@"name"];
    hero.icon = dict[@"icon"];
    hero.intro = dict[@"intro"];
    return hero;
}
@end

 

源码-0203-cell的循环利用01

标签:count   范围   group   覆盖数   数组   control   循环   force   return   

原文地址:http://www.cnblogs.com/laugh/p/6432943.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!