UITableView-04Cell的循环利用
2016-05-13 19:24
369 查看
cell的循环利用方式1
/** * 什么时候调用:每当有一个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; }
tableView性能优化 - cell的循环利用方式2
定义一个全局变量// 定义重用标识 NSString *ID = @"cell";
注册某个标识对应的cell类型
// 在这个方法中注册cell - (void)viewDidLoad { [super viewDidLoad]; // 注册某个标识对应的cell类型 [self.tableView registerClass:[UITableViewCell class] forCellReuseIdentifier:ID]; }
在数据源方法中返回cell
- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath { // 1.去缓存池中查找cell UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:ID]; // 2.覆盖数据 cell.textLabel.text = [NSString stringWithFormat:@"testdata - %zd", indexPath.row]; return cell; }
tableView性能优化 - cell的循环利用方式3
在storyboard中设置UITableView的Dynamic Prototyp4000
es Cell
设置cell的重用标识
在代码中利用重用标识获取cell
// 0.重用标识 // 被static修饰的局部变量:只会初始化一次,在整个程序运行过程中,只有一份内存 static NSString *ID = @"cell"; // 1.先根据cell的标识去缓存池中查找可循环利用的cell UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:ID]; // 2.覆盖数据 cell.textLabel.text = [NSString stringWithFormat:@"cell - %zd", indexPath.row]; return cell;
下面对之前LOL英雄项目进行优化
用方式2进行cell的循环利用viewController.m 源文件
// // ViewController.m // LOL英雄-单组数据 // // Created by Kavee DJ on 16/5/13. // Copyright © 2016年 Kavee DJ. All rights reserved. // #import "ViewController.h" #import "KDJHero.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) { KDJHero *hero = [KDJHero heroWithDict:dict]; [heroArray addObject:hero]; } _heroes = heroArray; } return _heroes; } // 定义重用标识 NSString *ID = @"hero"; - (void)viewDidLoad { [super viewDidLoad]; // Do any additional setup after loading the view, typically from a nib. // 注册某个标识对应的cell类型 [self.tableView registerClass:[UITableViewCell class] forCellReuseIdentifier:ID]; } - (void)didReceiveMemoryWarning { [super didReceiveMemoryWarning]; // Dispose of any resources that can be recreated. } #pragma mark - <UITableViewDataSource> // 默认就是1组 //- (NSInteger)numberOfSectionsInTableView:(UITableView *)tableView //{ // return 1; //} - (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.覆盖数据 KDJHero *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
相关文章推荐
- 解决UITableViewCell被选中时UILabel的背景颜色变成透明
- android 随记 ContentValues
- UGUI源码学习之一(UI坐标系统)
- 系统自带的搜索控制器和自己封装的带搜索记录的控制器
- JS valueOf与字符串
- Equinox P2的学习
- mysql unique option prefix myisam_recover instead of myisam-recover-options的解决方法
- UITextField限制输入字数高亮状态下输入框内真实类容与textFiled(解决中文输入问题)
- error MS8020 Build tools v140 cannot be found解决办法
- 浙大 PAT Advanced level 1017. Queueing at Bank (25)
- 根据字体多少使UILabel自动调节尺寸
- POJ 2299 Ultra-QuickSort 归并排序
- 利用 druid 的 sql parser 模块解析 sql 语句
- UINavigationcontroller
- FragmentTabHost切换Fragment时避免UI重新加载
- Android基础UI之ViewPager禁止滑动
- 表连接 join和(+)、union和uion all
- easyUi --修改
- easyUi 添加
- iOS UISearchBar去掉灰色部分