红包实体,文章实体 都属于动态 ,定义时候实现该协议DynamicPro,相当于java中的接口。
dataList 数组中 存放的是通过网络请求拿到的 DynamicPro 类型的动态列表。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
@protocol DynamicPro <NSObject>
@end

红包实体,文章实体 都属于动态 ,定义时候实现该协议DynamicPro。
dataList 数组中 存放的是通过网络请求拿到的 DynamicPro 类型的动态列表。

DynamicCell: UITableViewCell
{
属性 Id<DynamicPro> dynamic; //文章动态,普通动态,直播动态,红包类型动态
}

@implementation DynamicCell
-(void)setDynamic:(id<DynamicPro>)dynamic{
_dynamic = dynamic;

//DynamicCell 有很多子类cell: 红包cell ,文章cell,直播cell 等
//在子类cell 渲染具体UI数据绑定
}
@end


表格 cellFor 渲染的时候:{
DynamicPro *dynamic = self.dataList[indexPath.row];
DynamicCell * cell = [红包cell new]; //根据dynamic类型 创建 不同的 动态cell
//最终统一设置动态数据
[cell setDynamic: dynamic];
}

表格高度 heightFor 渲染的时候:{

DynamicPro *dynamic = self.dataList[indexPath.row];
if(dynamic 高度不变的){
return 44;
}else{
//高度变动的用自动布局
return UITableViewAutomaticDimension;
}
}

表格 estimatedHeightForRowAtIndexPath 进行自动布局的估算
{ return 100;
}

VC 发起请求, 一个专门发请求的发射器;我给它取名字 叫 NetManager , 显然 ,为 了不重复创建http 请求基础配置(请求头,Https证书配置等),这是个单例;

发射器 发的是请求; 考虑到每个业务 都有不同的请求;我准备了 一个 超级父类请求 ;取名 DataRequest; 具体的请求,只需传 具体的子类request;

一个APP 请求有很多,为了区分 及 维护方便 ,于是我定义了一个枚举;每个业务请求,只需给它表明一个标识;

AFNetworking也被广泛使用。其它的ASIHttpRequest,MKNetworkKit啥的其实也都还不错,苹果对网络请求部分已经做了很好的封装。但不管如何,APP端还是要对网络进行一个封装。在实际的App开发中,Afnetworking已经成为了事实上各大App的标准配置。

iOS开发领域有很多对象间数据的传递方式,我看到的大多数App在网络层所采用的方案主要集中于这三种:Delegate,Notification,Block。我的意见是Delegate为主,Notification可以用在网络发生变化时候使用。

ios线程形式有三种。 ios4后,苹果改用GCD多线程。线程可以用来干什么呢?多线程可以用来后台加载图片更新主线程UI,或者请求网络数据等等。

Thread

使用 NSThread 来创建线程有两种方法:

1
2
3
4
5
6
7
8
[NSThread detachNewThreadSelector:@selector(myThreadMainMethod:) toTarget:self withObject:nil];

NSThread* myThread = [[NSThread alloc] initWithTarget:self

selector:@selector(myThreadMainMethod:)

object:nil];
[myThread start]; // Actually create the thread