您的位置:首页 > 移动开发 > IOS开发

iOS开发脚踏实地学习day06--tableView,汽车品牌

2015-09-11 17:02 369 查看
1.注意的数据用建模的方式,直接用数组取出的对象是id类型,不能用点语法,可以分开写,或是用getter方法。



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
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: