【原创】开源中国阅读小记 - 1
来源:互联网 发布:iphone手机必备软件 编辑:程序博客网 时间:2024/04/29 16:35
可能后续会写几篇关于阅读开源中国客户端源码的一些收获。
1. 预编译文件oschina-Prefix.pch
***-Prefix.pch 该文件可以理解为整个工程的公共头文件,往里添加一些不常变的库或者宏定义,可以提升编译效率。
#ifndef __IPHONE_4_0#warning "This project uses features only available in iOS SDK 4.0 and later."#endif#ifdef __OBJC__ #import <UIKit/UIKit.h> #import <Foundation/Foundation.h> #import <CoreData/CoreData.h> #import <QuartzCore/QuartzCore.h>//添加的预编译#import "ASIHTTPRequest.h"#import "ASIFormDataRequest.h"#import "ASIHTTPRequestDelegate.h"#import "ASIHTTPRequestConfig.h"#import "AFXMLRequestOperation.h"# 省略。。#define api_news_list @"http://www.oschina.net/action/api/news_list"#define api_news_detail # 省略。。//宏定义 新闻#define TweetCellIdentifier @"TweetCellIdentifier"#define loadMoreIdentifier @"loadMoreIdentifier"#define NewsCellIdentifier @"NewsCellIdentifier"# 省略。。。#define MyPortraitCellIdentifier @"MyPortraitCellIdentifier"#define IS_IPHONE_5 ( fabs( ( double )[ [ UIScreen mainScreen ] bounds ].size.height - ( double )568 ) < DBL_EPSILON )#define loadNext20Tip @"下面 20 项 . . ."#define loadingTip @"正在加载 . . ."#define networkError @"网络无连接"#define noNetworkTip @"网络无连接"//消息通知固定字符串#define Notification_DetailCommentCount @"Notification_DetailCommentCount"#define Notification_NoticeUpdate @"Notification_NoticeUpdate"#define Notification_TabClick @"Notification_TabClick"//html头部
#define USERAGENT @"OSChina.NET/iOS/5.0"#define AppVersion @"1.7.0"#ifdef DEBUG#define debugLog(...) NSLog(__VA_ARGS__)#define debugMethod() NSLog(@"%s", __func__)#else#define debugLog(...)#define debugMethod()#endif#endif
以上所include的头文件,以及宏定义字符串在后续的objc文件里都能任意使用;但需要注意的是,这里所包含的文件应该是极为稳定的,否则每次都得全部重新编译一次。
2. 下面20项
也就是底部继续载入更多条目的实现。其实也就是oschina用的第三方lib:EGORefreshTableHeaderView,比较老了,没有上拉载入的功能。不过也可以看看自己人肉是怎么实现的。
if ([indexPath row] < [news count]) { return cell;}else{ return [[DataSingleton Instance] getLoadMoreCell:tableView andIsLoadOver:isLoadOver andLoadOverString:@"已经加载全部新闻" andLoadingString:(isLoading ? loadingTip : loadNext20Tip) andIsLoading:isLoading]; }
默认每页载入20条,当index <= 19(或者当前载入的总数 - 1)的时候,返回具体的cell,否则,返回loadMoreCell
// 用途:返回一个LoadingCell// LoadingCell就是一个Label+UIActivityIndicatorView(载入中状态出现)- (UITableViewCell *)getLoadMoreCell:(UITableView *)tableView andIsLoadOver:(BOOL)isLoadOver andLoadOverString:(NSString *)loadOverString andLoadingString:(NSString *)loadingString andIsLoading:(BOOL)isLoading{ LoadingCell * cell = [tableView dequeueReusableCellWithIdentifier:@"loadingCell"]; // 通常用法,如果cell还没创建过(不能被复用),则从nib中载入 if (!cell) { NSArray *objects = [[NSBundle mainBundle] loadNibNamed:@"LoadingCell" owner:self options:nil]; for (NSObject *o in objects) { if ([o isKindOfClass:[LoadingCell class]]) { cell = (LoadingCell *)o; break; } } } cell.lbl.font = [UIFont boldSystemFontOfSize:21.0]; // isLoadOver表示的是,服务器的记录是否已经被全部读完,而不是本次加载完毕 // loadingString的可能是‘下面20项’或‘正在加载 . . .’ cell.lbl.text = isLoadOver ? loadOverString : loadingString; // 如果是正在加载中,那么展示loading view动画 if (isLoading) { cell.loading.hidden = NO; [cell.loading startAnimating]; } else { cell.loading.hidden = YES; [cell.loading stopAnimating]; } return cell;}
上述代码中,并没有点击该列所需要采取的action,具体的action,其实还是在原来的ViewController中实现:
- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath{ [tableView deselectRowAtIndexPath:indexPath animated:YES]; int row = [indexPath row]; if (row >= [news count]) { if (!isLoading) { [self performSelector:@selector(reload:)]; } }
reload就是进行page+1的请求,将当前的allCount + 新增的条目数,同时如果是第一页的话,做cache。
该项目做的cache其实是采用NSUserDefaults的方式,key为detail-#-#,value为xml文本。 下次载入第一页的时候还需要做xml的解析。。。
我以前做过的项目用的采用的是序列化对象+write file的方式,两种方式哪一种性能更优,有待验证。
- 【原创】开源中国阅读小记 - 1
- 【原创】开源中国阅读小记
- 【原创】开源中国阅读小记
- 【原创】开源中国阅读小记 - 2 - 单例
- 【原创】开源中国阅读小记 - 3 - TableCell图片异步加载
- 开源中国阅读小记(2)
- 《Windows核心编程》阅读小记 1
- 《编程珠玑》阅读小记(1)— 开篇
- Xen--内存代码阅读小记
- ecshop V2.7.3 阅读小记
- 阅读 TCMessageBox toast 源码小记
- paper阅读小记(草稿)
- 中国TOP排行榜 小记 沉思
- 使用 vim + ctags + cscope + taglist 阅读源码 - bo博的个人空间 - 开源中国社区
- 中国原创WEB技术站点
- 中国原创游戏的出路
- 中国原创的智能鞋
- 程序员的7个坏习惯来源: 开源中国社区 发布时间: 2012-06-03 08:38 阅读: 5543 次 原文链接 全屏阅读 [收藏]
- hdu1226 BFS
- MFC程序的与window程序的区别及需要的库和头文件
- 不需Developper认证的真机调试(需要越狱)
- Siebel Update 8.1.1.9的相关补丁
- 小爬虫——下载给定网页上的图片
- 【原创】开源中国阅读小记 - 1
- 【原创】开源中国阅读小记 - 2 - 单例
- Mac OS X快捷键指南 + xcode常用快捷键
- 【原创】开源中国阅读小记 - 3 - TableCell图片异步加载
- 【原创】GCD编程 - 1
- 【原创】GCD编程 - 2
- 【原创】Xcode中多离线文档及多版本模拟器
- Android自定义View之一:初探实例
- Applying QuickFix For Dedicated Client Using OPatch on Siebel 8.1.1.9 causes an error