简单中的不简单,iphone应用开发实践总结:《社区类iphone应用开发的技术实践》|...
TRANSCRIPT
iOS DevCamp
Produced by CSDN Website: h5p://devcamp.csdn.net/ Weibo: h5p://weibo.com/cmdnclub/
www.mamabang.com
简单中的不简单
社区类iOS应用开发的技术实践分享
陈剑飞, 麻麻帮创始人 2012年7月
www.mamabang.com
-‐ (void)someMethod { if ([someOther boolValue]) { //Do something important } } 改写为 -‐ (void)someMethod { if (![someOther boolValue]) return; //Do something important }
开始协作之前 • 代码缩进
– 空格长度(2?4?) – 函数声明中的空格 – 行长度是否要限制?限制多少? – 结尾”{“的位置 – 代码中的空行
• 变量命名规则 – 选择合适的词 (Info? Data? Object?) – 变量名长短 – 类变量的下划线 – 大小写 (匈牙利命名法?驼峰命名法?)
www.mamabang.com
参考: 1. Apple “Coding Guidelines for
Cocoa”
2. Google “ObjecZve-‐C Style Guide”
3. ZDS “Code Style Guide”
-‐ (void)someMethod { if ([someOther boolValue]) { //Do something important } } 改写为 -‐ (void)someMethod { if (![someOther boolValue]) return; //Do something important }
开始协作之前 • 函数命名规则
– 清晰有效,不会有歧义 – 慎用缩写(SND, PSWD, IMG),写全称 – 不同类中相似方法,尽量用同样的名字
• 注释要求 – 大部分情况下函数名和变量名应该能说明问题 – 不要用注释临时删除代码 – 不需要注释的代码是最整洁的代码
www.mamabang.com
参考: 1. Apple “Coding Guidelines for
Cocoa”
2. Google “ObjecZve-‐C Style Guide”
3. ZDS “Code Style Guide”
-‐ (void)someMethod { if ([someOther boolValue]) { //Do something important } } 改写为 -‐ (void)someMethod { if (![someOther boolValue]) return; //Do something important }
开始协作之前
• 语法相关 – 对于空值的判断 – 对于布尔变量的判断 – 代码主路径 – Dealloc方法中的代码顺序 – Protocal 和#pragma的使用
• Project文件夹的组织
www.mamabang.com
参考: 1. Apple “Coding Guidelines for
Cocoa”
2. Google “ObjecZve-‐C Style Guide”
3. ZDS “Code Style Guide”
工欲善其事,必先利其器 • Xcode的键盘快捷
– Command + Up – Command + L – Shia + Command + F – Command + F
• Xcode 标记工具 – #pragma mark – 行标记 – //TODO: //FIXME: //MARK: //!!!: //???:(从Xcode4开始写在{}内无效) – #warning
• -‐Xcode辅助工具 – Instruments (Leak, AllocaZon, Zombie) – Analyze
www.mamabang.com
“⼀一个程序员的职业修养”
• 整洁代码 – 没有孤立的数字 – 短函数 – 不复制代码
• 代码洁癖 • 阶段性重构的必要性 • 面向对象的思考 • Modal-‐View-‐Controller 架构
www.mamabang.com
推荐阅读:
Robert. C. MarZn (著) 韩磊(译)
人民邮电出版社
踩在巨人的肩膀上
• 常见开源框架选择 – ASIH5pRequest – SVProgressHUD – SDWebImage – TouchJSON – EGORefreshTableHeaderView
• 保持代码更新 (gitHub) • 熟读源代码 • 改造合适自己的版本
www.mamabang.com
社区类应用特点
• 用户是内容的产生者
• 服务器和手机端有大量数据交互
• 用户对于刷新和等待的忍受度低
www.mamabang.com
产品设计对策 • 需要简化输入,图片上传,视频上传等
• 支持横屏输入,语音输入 • 支持文字草稿,文字复制
• 精简数据传输 • 本地缓存机制实现与更新策略
• 异步与同步选择 • 长时间操作的提示分类
社区类应用特点
• 大量页面跳转
• 多数页面需要和服务器交互
• 通知频繁
www.mamabang.com
技术实现 • 设计统⼀一的跳转方式 (程序内URL)
• 在传统View Controller基础上设计多个继承类,封装了大量与服务器同步交互或者异步交互的方法
• 设计统⼀一的通知管理器,管理全局服务器通知,在每次与服务器的数据传输中,放置通知字段
实例一:瀑布流实现中的若干问题
www.mamabang.com
• UIScrollview + 自定义View
• 视频首帧图片延迟加载
• 内存效率问题, 如何释放不需要显示的图片所占用的内存
• 动态加载效果
实例二:有关通知的设计
• 三个层次的通知 – Push NoZficaZon – 程序内通知 – 通知中心
• 与服务器每次交换数据都含有通知结构 {name=“xxx”, code=“xx”, data=“”, noZf=“”}
• 每个页面都含有通知显示
www.mamabang.com
关于 Memory Warning
• 图片和视频占用内存多,Memory Warning是经常的,在viewDidUnload中释放非必须资源,注意,该资源应该能被viewDidLoad中重新创建,不然不应该释放
• 尽量用真机测试,不然无法发现潜在memory warning 问题
• 如果在程序中可预见性的会产生大量autorelease对象,应该自建autorelease pool
www.mamabang.com