iOS开发脚踏实地学习day06--tableView,汽车品牌
2015-09-11 17:02
369 查看
1.注意的数据用建模的方式,直接用数组取出的对象是id类型,不能用点语法,可以分开写,或是用getter方法。
2.关于代理的小结
@required 必须实现的方法
@optional 可选的实现方法
1.遵守协议,预先定义好方法,不实现,具体的实现工作由代理负责
<控件的名字+DataSource> 定义的与数据源有关的方法
<控件的名字+Delegate> 定义的与事件有关的方法,通常用来监听控件的事件。
2.代理方法
1>方法名以控件名开头(没有类前缀)-> 方便程序员编写的时候,快速找到需要的协议方法;
2> 第一个参数是自己 -> 意味着在协议方法中,可以直接访问对象的属性,或者调用方法;
3>代理方法的返回值 -> 控制器(代理)向控件(委托)发送数据
3.UITableView的行高设置效率。
4.UITableView内存优化方法
用优化方法,假设页面上同时显示的是5个单元格,那么上下拉动时,会重用单元格,不会分配新的内存空间,总共需要5个内存空间;
普通方法,假设总共有100个单元格,每次都要分配新的内存空间,最多需要100个内存空间。
5.tableView的右侧索引
6.自定义代理
2.关于代理的小结
@required 必须实现的方法
@optional 可选的实现方法
1.遵守协议,预先定义好方法,不实现,具体的实现工作由代理负责
<控件的名字+DataSource> 定义的与数据源有关的方法
<控件的名字+Delegate> 定义的与事件有关的方法,通常用来监听控件的事件。
2.代理方法
1>方法名以控件名开头(没有类前缀)-> 方便程序员编写的时候,快速找到需要的协议方法;
2> 第一个参数是自己 -> 意味着在协议方法中,可以直接访问对象的属性,或者调用方法;
3>代理方法的返回值 -> 控制器(代理)向控件(委托)发送数据
3.UITableView的行高设置效率。
//UITableViewDelegate的协议方法,行高默认是44,代理设置行高的优先级高于属性rowHeight - (CGFloat)tableView:(UITableView *)tableView heightForRowAtIndexPath:(NSIndexPath *)indexPath { //适用于行高不同的情况,但是效率不高 return (indexPath.row % 2) ? 60 : 44; // 以下代码可以使用rowHeight属性替换!,若是每行高度相同,则用属性来修改高度值,效率高。 // return 60; }
4.UITableView内存优化方法
用优化方法,假设页面上同时显示的是5个单元格,那么上下拉动时,会重用单元格,不会分配新的内存空间,总共需要5个内存空间;
普通方法,假设总共有100个单元格,每次都要分配新的内存空间,最多需要100个内存空间。
//优化方法,重复利用内存空间 //可重用标示符字符串 //static静态变量,可以保证系统为变量只分配一次内存空间 //静态变量,一旦被创建,就不会被释放,只在程序被销毁时才会被释放! static NSString *ID = @"CELL"; //dequeueReusableCellWithIdentifier是实例方法,从缓存池中取出可重用的单元格 UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:ID]; if (cell == nil) { //如果没有,实例化新的单元格 cell = [[UITableViewCell alloc] initWithStyle:UITableViewCellStyleSubtitle reuseIdentifier:ID]; } //用下句,每次都要分配新的内存空间 // UITableViewCell *cell =[[UITableViewCell alloc] initWithStyle:UITableViewCellStyleSubtitle reuseIdentifier:nil];
5.tableView的右侧索引
//右侧索引 -(NSArray *)sectionIndexTitlesForTableView:(UITableView *)tableView{ //索引数组的下标对应的是分组的下标 // NSMutableArray *arrayM = [NSMutableArray array]; // for (CarGroup *group in self.carGroup) { // [arrayM addObject:group.title]; // } // return arrayM; //KVC方法是cocoa的大招 //用来间接获取或是修改对象的属性的方法 //<span style="background-color: rgb(255, 255, 0);">用KVC时,如果指定对象不包含keyPath的“键名”,则会进入对象的内部查找</span> //如果取值的对象是一个数组,同样返回的是一个数组 return [self.carGroup valueForKey:@"title"]; }
6.自定义代理
#import <UIKit/UIKit.h> <span style="background-color: rgb(255, 255, 0);">@class HMAppInfo, HMAppView;//提前声明一下HMAppView</span> // 1. 协议名以类名开始+Delegate <span style="background-color: rgb(255, 255, 0);">@protocol HMAppViewDelegate <NSObject> </span> <span style="background-color: rgb(255, 255, 0);">@optional //表明是可选的方法,对应的是@required,必须实现的方法</span> // 2. 协议方法,以类名开始(没有类前缀),第一个参数是自己 // 只是定义方法名,不做具体实现 <span style="background-color: rgb(255, 255, 0);">- (void)appViewDidClickDownloadButton:(HMAppView *)appView;</span> @end @interface HMAppView : UIView <span style="background-color: rgb(255, 255, 0);"> // 3. 定义代理属性,遵守了HMAppViewDelegate协议的任意一个对象,都可以成为代理 @property (nonatomic, weak) id<HMAppViewDelegate> delegate;</span> /** 类方法,方便调用视图 */ + (instancetype)appView; /** 实例化视图,并使用appInfo设置视图的显示 */ + (instancetype)appViewWithAppInfo:(HMAppInfo *)appInfo; // 自定义视图中显示的数据来源是数据模型 // 使用模型设置自定义视图的显示 @property (nonatomic, strong) HMAppInfo *appInfo; @end
相关文章推荐
- IOS 核心动画之CAKeyframeAnimation - iBaby
- iOS代码覆盖率测试工具
- iOS:json格式字符串转字典,字典转json格式字符串
- 虚拟机下搭建IOS开发环境
- iOS开发日记17-runtime基础篇
- iOS 中GET 和 POST 请求
- iOS GCD使用指南
- [ios][map]自定义地图标注
- iOS Layer动画收集
- NSUserDefaults单例的使用
- ios category类别的使用
- iOS中Bitcode的介绍及配置
- iOS开发 之闭包(Block)
- IOS开发系列
- ios 720全景资料
- iOS定位获取当前所在经纬度,进而获得具体地址(省市地区街道)
- iOS 学习资料整理
- 蓝懿学习之 遇到卡壳的地方了
- iOS应用性能调优的25个建议和技巧
- 关于ios使用NSLocalizedString本地化