淘宝技术嘉年华记录整理

昨天写完PIMS那篇文章后,睡觉都差不多4点了,早上八点多起来去参加淘宝的技术嘉年华,后来证明,还是值得的,因为图灵出版社的那位好心的大姐送了我两本书,分别是:《重构与模式》和《深入浅出Ext JS》,本来问她要的是一本关于API设计的书,她说那本书太好了,只有一本,如果下午3点还没牛人领走就给我,结果3点那书果断被某牛拿走,于是我只能捡剩下的了,还有两本,不错啊,哈哈~~

上午就听了iConference中的两个主题,一个是淘宝for iOS的历程,另一个是iOS的内存管理,腾讯那位老兄讲的输入法没怎么听,想跑去ACT那边听百度美女讲移动互联网的体验设计,只可惜,美女吸引力太大,门口都挤满了人,挤不进去就去图灵那边跟那位大姐聊天了。不过话说腾讯的那位兄弟讲完后第一个提问的人提的问题相当猛烈,估计跟腾讯有仇,什么惨无人道、流氓软件啊等词语都用上了,很搞笑,貌似还有人鼓掌的~~

下面贴上iConference中我主要听的两个主题的笔记

1、淘宝iOS

持续集成:hudson

淘宝运营:

JSON驱动:首页布局,JSON编辑器(运营操作)

  • 节制,不要无限制地增加形式
  • 前瞻,提前考虑一些展示形式的变化
  • 终极解决方案:WebView(Webkit)
  • 拦截页面内链接,从web跳到程序内

基础库:

无关UI部分

统一数据接口,封装为库,包装调用

淘宝开放平台         —–|

淘宝无线开放平台         |——–>TBSDK

其他系统json数据——|

返回统一数据结构

UI组件:

1、商品信息Cell

2、交易信息Cell

3,商品销售属性选择

专用组件:

用户信用等级,卖家服务图标,阿里旺旺在线状态

通用组件:

渐变按钮,网络图片,图片浏览~

工具类,辅助类

1、偏好设置

2、本地数据

3、硬件环境,软件环境(Retina屏幕需要显示高清图片,根据网络环境决定显示内容)

4、常用的功能点,封装为工具类

对于积累:

  • 统一功能需求
  • 视觉上进行把握和控制
  • 及时整理
  • 及时重构

复用

淘宝构架

taobao for iphone   |    taobao for ipad

————————————————

common controllers   module controllers

———————————————-

TBSDK

———————————————-

cocoa touch

用到的框架:

  • ASIHttpRequeset
  • JSON Framework
  • SFHFKeychainUtils
  • 还有一个忘了

模块化代码

  • 功能模块组织代码
  • 低耦合的模块独立为单独项目,使用cross-project reference
  • 拆分controller内视图处理和数据处理(MVC)

Universal App

  • 尽可能使用iphone代码
  • 使用autoresizingMask
  • 使用宏判断运行环境

对于复用

经验:

内存管理:

循环引用

Weak Link:

(兼容低版本iOS)

结合NSClassFromString

结合respondsToSelector

判断当前版本是否有这个类,如果没有就过滤

判断当前版本屏幕硬件

Theplant Micheal 提的问题:

密码保存:KeyChain,Session ID代替用户信息

2、iOS的内存管理—–李亮/Holly Lee(上海改变科技有限公司技术总监)

李亮

holly.lee@gmail.com

内容:

  1. 内存管理概述
  2. oc内存管理
  3. application内存管理
  4. 解决内存问题

1、概述

与OSX基本相同

特殊性

模拟器与设备差别

2、

-(id)autorelease;调用autorelease放入autoreleasepool

NSAutoreleasePool对象

NSAutoreleasePool *pool

真正释放的时机:RunLoop

得到对象所有权:

alloc分配的

显式调用retain

调用了方法名称中 有new copy字样

——必须调用release或者autorelease释放

失去对象所有权

release

调用autorelease

set方法,retain传入对象

-(void) setSomeObj:(id)new

{

[myObj release];

myObj = [new retain];

}

混合了c/c++的代码的内存管理:其基本原则是按照各自原来的方式进行

3、iphone app 内存管理

  • 在interface builder中连接好IBOutlet对象必须在ViewController本身释放之前释放,否则会造成内存泄露。
  • 避免循环引用:循环引用将会导致对象无法释放
  • 在内存紧张时的回调和通知:
    • -(void)applicationDidReceiveMemoryWarning:
      • (UIApplication *)application
    • -(void)didReceiveMemoryWarning;
    • UIApplicationDidReceiveMemoryWarningNotification
  • 内存紧张时,非当前的ViewController会释放view,下一次回来的时候会重新创建(loadView)或者装入view(viewDidLoad),因此需要考虑当前状态
  • 仔细考虑系统本身提供的内存缓存方式:
    • 对不需要重复使用的图片使用[UIImage imageWithContentOfFile:]代替[UIImage imageNamed:]
    • 实验:iphone 1代,最多大概10M;ipad 1代最多20M
  • 减少那些autorelease的对象的数量。能使用alloc+release的地方就用
  • 尽可能迟的装入或者创建对象。在View Controller上比较多(会增加一下子的内存量),因此需要尽可能避免在IB中建立一切的做法

解决问题

  • 问题:
    • 内存泄露
    • 重复释放
  • Instrument Tool:Leaks(监测内存泄露),Object Allocation(当前内存分配情况,监测内存一段时间内的分配情况)
  • NSZombieEnabled(监测重复释放)
  • 静态分析器:LLVM/Clang Static Analyzer
最后在技术沙龙听了上千万HTTP长连接以及Nodejs的沙龙,没有去听HBase的那场真是后悔,很想看看淘宝到底时怎么再用Hadoop的。百度的那场我赶了个结尾,看到演讲嘉宾来自百度商务搜索部我就知道一定要去听听了,因为我刚被百度商务搜索部的某位哥哥电话面试过,谁知道他提前开始了,真可惜。话说百度的面试结果明后天就出来了,虽然嘴上说不报希望了,但内心还是很期待能中个头奖的,虽然我也知道这次真是没戏。加油吧!

2 comments on “淘宝技术嘉年华记录整理

  1. 内存释放,有个地方一直没有明白。直接链接IB的那些对象,不写property retian等getter,setter等方法,是否需要释放他们。按照原则来说,我没有在本身view controller里面创建他们,所以不应该负责他们的释放。 问题是,一般我释放了也不会挂。

Leave a comment