iReddit源码分析

来源:互联网 发布:pp越狱助手mac版 编辑:程序博客网 时间:2024/06/04 19:50

iReddit源码分析

 

前段时间因为工作的需要看了一下iReddit的源代码,但是由于代码完全没有注释而且Three20框架的文档什么的也不齐全,所以说这个过程有些细节纠结了很久,现在希望整理一下整个软件的一个思路吧,如果有人想要通过看源代码来学习Three20框架,也算是一个大纲性的东西,主要讲主要的程序流程,一些小功能就没有细说了。

首先看一下整体代码的框架,依赖的外部框架主要是Three20和TouchJSON,然后按照MVC的设计模式主要是Data、Views和ViewControllers三个文件夹,这里值得注意的是Constants.h文件包含了全部的字符串和一些保存到NSUserDefaults的key值;而comments里面则是一些javascript和CSS。


首先看一下AppDelegate,applicationDidFinishLaunching方法完成了基本的NSUserDefaults的注册,同时初始化了一个UINavigationController,设置RootViewController并push进去一个SubredditViewController。这里特别需要注意的是


这里决定了后面打开的主界面。接下来看看推进来的这个RootController做了什么吧,声明很简单,先看看最终的效果:


估计大家都觉得很简单了,因为这个界面就算不用Three20也是很容易就实现的,但是我们来看看Three20下面应该如何实现吧。简单的设置都不说了,看看createModel函数,这个函数是自动调用的,用来指定dataSource,因为为了代码的结构,一般都把datasource写在别的地方,这个地方就直接初始化这个东西:


这里有一个SubredditSectionDataSource,继承于TTSectionDataSource,还有一个是TTListDataSource,两者的区别大家可以百度一下。就这样的几句话,我们的界面就完成了。那几个array都是在别的地方写好了的:


界面的显示基本就是这样,很简单的过程,再来看看如何响应点击事件。当然是通过一个委托:(void)didSelectObject:(TTTableLinkedItem *)object atIndexPath:(NSIndexPath*)indexPath,我们通过判断TTTableLinkedItem的URL参数就可以知道打开页面的类型,或者是链接,设置界面什么的我们就不看了,就看看主要的展示界面:


接下来我们就看看这个主要负责展示的界面:

同样的,一些细节就不细讲,首先看看initWithField函数里面的


这个地方我们注册了url和title,是否还记得在最开始的时候也注册过,不过那个时候注册的是主界面的参数,接下来在loadView里面做了简单的界面初始化,主要的函数还是就两个:



这里指定了delegate和datasource,主要关注如何显示吧,先说datasource,SubredditDataSource里面的model方法返回的是一个SubredditDataModel的东西,也就是说具体的获取数据啥的还是从那里拿到的,那就看看SubredditDataModel的load函数:

这里主要是做了一个TTURLRequest的请求,请求完毕后requestDisFinihLoad把json数据解析成了一个_storys的字典,这就是SubredditDataModel的主要作用,那么这个_storys怎么变成我们tableview上面的显示呢?大家是否记得官方的应该是怎么做,对了,- (UITableViewCell*)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath ,我们看看TTTableViewDataSource就知道了,它把这个方法重写了一下!具体的我就不分析了,大家一看就知道,就是通过获取对象的类名,然后分配内存,为什么这么做?因为我们和官方的每个cell都是同一个类不一样,所以有了这个过程,大家可以看看这个方法:

就是用来返回类的名称,如果你的cell是自定义的类,那就要重新写这个方法,我们因为用的是自己的StoryCell,所以也有所改动:


所以我们可以用cellForRowAtIndexPath里面调用的来完成我们自己的初始化,大家记得我们这时候已经为StoryCell分配了内存,而且这个动作完全是由Three20自动做的,那么我们需要做的就如下了:


这就是整个主要界面的显示过程,当然还有更下一级的界面,我就不具体说了,以后要是有时间的话也会写一些更加详细的关于Three20的文章。好的,就这样~

原创粉丝点击