ios面试简历模版

2024-06-18

ios面试简历模版(共5篇)

1.ios面试简历模版 篇一

1.用#define定义一个宏,表示一年中的秒数。

@interface USER

{NSSTring *name;}

@end

a)self.name=@”abc”与name=@”abc”的区别?

b)self.name=[[NSSTring alloc]initWithString:@”abc”];中name的retainCount是多少?

c)补全setName:(NSSTring *)myName方法

d)这里用self.name访问了name属性,还可以用别的方法访问name属

性么?

2.UITableView中什么可以自定义?

3.view.bounds和view.frame有什么区别?

4.iOS中是怎样进行内存管理的?

5.简述分类与继承的区别。

6.简述CALayer与UIView的区别。

7.简述堆与栈的区别。

8.简述Delegate、KVO和NotificationCenter区别。

9.用预处理指令#define声明MAX(X,Y)和MIN(X,Y)。

10.试写出strCompare

11.对于一个字节(8bit)的变量,求其二进制中“1”的个数,要求算法的执

行效率尽可能地高。

12.求两个正整数的最大公约数,要求算法的执行效率尽可能地高。

13.如何判断两个单向链表是否相交?

14.能不能找到符合如下条件的9位数:

a)这个数包括了1-9这9个数字;

b)这个9位数的前n位都能被n整除,若这个数表示为abcdefghi,则ab

可以被2整除,abc可以被3整除„„abcdefghi可以被9整除。

15.说说autorelease和release 的区别?

16.如何下载图片?

17.微博的认证?

18.版本扩展?

19.程序调试?

20..(点)运算符?

21.UITableView中每一行都缓存图片的处理,如何处理才能在滑动时不会出现等

待的现象。

22.

2.ios个人简历 篇二

姓名:

手机:1883xxxxx

邮箱:

性别:男

年龄:24

学历:本科

教育背景

.09-.07 XXXXX学院 计算机应用

主修课程

基本会计、统计学、市场营销、国际市场营销、市场调查与预测、商业心理学、广告学、公共关系学、货币银行学、经济法、国际贸易、大学英语、经济数学、计算机应用等。

工作经历

-04至2021-11 XXXX有限公司 iOS程序员

行业类别:互联网/电子商务

主要职责:• 协助经理对产品进行架构

负责界面“邻里圈”,“我的”,“周边商户”的代码编写

对用户反馈的问题,及时响应和解决问题

积极向团队反馈开发中发现的功能优化方案

-12至2021-04 XXXXXX培训公司 iOS学员

内容:进行iOS等相关学习,掌握开发中所需的技巧,以及编程思想,等独立完成项目

2013-08至2014-11 XXXXXX有限公司 运维工程师

3.ios个人简历怎么写 篇三

基本信息:

姓名:XXX

生日:XX年XX月XX日

地址:XX省XX市

手机:159XXXXXX

邮箱:

微信:XXXXXXXX

刻育背景:

20xx.09 — 20xx.06电子科技大学成都学院计算机科学与技术(本科)

工作经历:

20xx.09 — 20xx.05北京新奥特集团有限公司iOS开发工程师

工作描述:基于iOS端的技术开发,负责iPhone应用软件的编码,协助产品经理进行应用及人机界面软件的设计和实现,完成与工作相关的技术文档编写,提供产品相关技术支持,学习和研究新技术以满足产品需求。

20xx.12—20xx.08 中国手游公司VIP运营专员

工作描述:主要测试游戏,收集并整理玩家的建议、意见,分析整理出来的文件并给出相应游戏的修改方案等等。

项目经历:

项目一:实时新闻开发模式:独立开发

项目描述:实时新闻是一款包含了国内外社会最新实事新闻的软件,操作简单,界面简洁大方,内容丰富。

责任描述:前期根据项目需求,对项目的架构进行分析,完成负责模块主要框架的搭建,以及环境搭建。中期完成负责模块功能的开发与实现。后期性能优化,调试bug,升级维护。

炯术要点:

1、首页使用ScrollView、NSTimer、UIPageController实现轮播图的自动轮播;

2、自定义工具类实现网络数据请求和网络判断;

3、自定义UITableViewCell用于展示UIImageView,UILabel,UITableViewCell高度自适应内容高度;

4、UITableViewCell点击后详情页面使用UIWebView展示详情信息;

5、使用MJRefresh实现上拉加载、下拉刷新;

6、使用SQLite进行数据处理,实现收藏;

7、使用ScrollView进行滚动菜单的搭建;

8、使用shareSDK实现第三方分享

9、使用NSDate获取时间差;

10、负责页面逻辑功能实现;

11、使用MVC设计模式,降低代码耦合度;

项目二:休闲时光开发模式:团队开发

项目描述:它是一款为人们在休闲的时候提供娱乐的软件,包括健康,天气,电台,搞笑段子等。

责任描述:根据需求设计进行了代码的编写,实现项目的健康,休闲页面等部分功能。

炯术要点:

1、自定义UITableViewCell的动态展示;

2、使用AFNetWorking实现网络数据请求和网络判断;

3、使用SDWebImage实现图片的加载缓存;

4、集成上拉加载、下拉刷新功能;

5、JSON数据解析

6、使用FMDB进行数据处理,实现收藏;

7、使用AVPlayer实现音乐播放。

项目三:南方+开发模式:团队开发

项目描述:南方+是一款全天生产与播发原创新闻、权威资讯和深度分析,突出独家、尊重原创、传递思想,24小时为用户提出新闻资讯和生活资讯的客户端。

责任描述:需求分析,负责实现项目新闻页的代码编写。

炯术要点:

1、严格遵循MVC设计模式开发,降低各个模块的耦合度;

2、使用SDWebImage进行图片缓存加载;

3、自定义工具类实现网络数据请求和网络判断;

4、使用JsonModel实现网络数据解析;

5、使用MJRefresh实现上拉加载、下拉刷新;

6、使用SQLite进行数据处理,实现收藏;

7、使用ShareSDK实现社会化分享;

自我评价:

1、善于学习,有独立钻研移动领域新技术的热情和能力,能独立解决各种疑难杂症,抗压力强;

2、具有良好的编程习惯,有较强的代码阅读能力和学习能力,对移动产品有浓厚兴趣,求知欲强;

3、喜欢技术,热爱iOS开发,良好的沟通和团队协作能力,有强烈的责任感和进取心;

4、具有很好的分析问题和解决问题的能力,勇于面对挑战性问题,对技术充满激情。

专业技能:

1、熟练掌握Objective—C/C;

2、熟练掌握Xib、StoryBoard可视化编程,提高开发效率,简化屏幕适配工作;

3、熟练使用单例、代理、观察者、MVC设计模式;

4、熟练掌握SQLite、CoreData、NSUserDefaults等数据持久化的方法;

5、熟练掌握GET,POST请求,以及XML,JSON解析的使用;

6、熟练使用UI控件,实现较复杂的页面搭建;

7、熟悉使用SDWebImage、FMDB、AFNetWorking等第三方类库;

8、熟悉NSThread、NSOperation、GCD多线程编程技术;

9、熟悉使用CocoaPods来管理第三方开源框架;

10、熟练使用NSURLSession进行大文件断点续传,进度监听;

11、了解使用GIT进行代码托管;

12、了解swift语言,了解HTTP、XMPP通信协议;

13、熟练掌握iOS SDK,熟悉常用第三方组件原理与使用方式并能熟练运用

14、具有良好的英文档阅读能力,编程基础扎实,具备良好的编程习惯

15、熟悉APP的上线流程以及版本迭代;

4.ios面试简历模版 篇四

AF知识网用户的回答我跟腾讯有三次之缘,但是最终还是没去成。

第一次是我大三的时候,已经忘了是怎么去的,当时我几乎什么都不会,笔试没过;

第二次我大四即将毕业,在某国内外包大公司实习一年,倒也没做什么特别重量级的活儿,也就是对安卓整套环境有了些许的了解,当时人才招聘会上就进行第一面,那个考官问了我几个有关安卓非常简单的问题以后,问了我这个问题: 你对多核编程优化怎么看?

我当时就傻眼了,一点也没接触过,确实不懂。很尴尬地打了个哈哈就过去了,结果面试OK,后来进腾讯和一群“高等学府”的计系、数学系做笔试,卡在了笔试上,也没去成。我当时基础知识很垃圾,基本属于什么鸟都不会。

第三次(两年以后)我接到一个深圳的电话,问我有没有兴趣去深圳,我以为是骗子,百度了一下发现真的是腾讯,聊了几句,他们手机QQ和开放平台的项目组在招人,这样看来比我前两次面试的小地方“腾讯子公司”强多了。

然后您猜怎么着,我前一周刚交了房子的首付,这时候让我离开去深圳,实在是很艰难。然后又没去成。

我在刚毕业的时候碰了几次壁,就老老实实地找了个小公司,要求不是特别高的,开始边玩边学。小公司是对日外包,顺道学了学日语。做了几个项目以后,这个小公司没有顶住这两年的中日压力,遣散了。我又加入了我朋友的公司一起忙项目,他的口才非常牛逼,我们俩的配合一般是他弄来项目,我来负责安卓部分的开发和整体项目(包括ios端)的把控。后来我因为房子的原因,没有和我的朋友继续下去,去了一个客户那里,这个人做所谓的O2O项目,并给我这个刚毕业不久的人看似不错的待遇并约定了股份(至少我的理解是这样)。随后一段时间到今年年初,承诺的股份、期权哪怕预购一毛钱没有(事实上我感觉项目要黄掉了),加之公司管理混乱不堪,也就退出了,现在在一家不大不小的公司里面拿着不高不低(在小城市)的工资。

你看我经历了哪些事情:

· 跟你一样地被羞辱(请允许我用这个词,我觉得是)· 频繁换工作(跳槽)· 互联网创业

· 背叛朋友(其实也没那么极端,我们现在关系很好,但是我一直觉得对不起他们)· 基本了解了公司的各种流程(小公司什么事儿都得接触)

· 学会了忍耐(呵呵脑残的客户and最近很火的《项目经理是条狗B》)· 参加了2013年的Google I/O Extended(北京)· 玩了O2O,做了各种各样的小项目

还有很多收获,我就不说了。

我至今仍一直在做最底到Framework层的东西,都是些小的app,虽然自己最近也有打算往NDK转,同时也在偶尔看看py和oc,但仍然技术走得慢吞吞:P 你问我为什么不往下学,我搞了这么几年开发,偶尔会有这样的想法: 我可能真的不适合搞技术。

脑子没有那些怪物聪明,耐不下性子没法挑战连续20小时不动,离开大学几年后想想数学都头疼,喜欢经常扒着淫科技看三级风,又或者跟是个人开始聊UE,UX,刷AF知识网等等。

然后我再逼着自己去学数据结构,学C语言,学py,学Axure,学各种专业知识。哦对了还得考个研究生来刷学历。

最近两年我像是突然开了窍,知道了各种各样的新东西,慢慢地我不光能在android开发,对做web的有时候还能指手画脚,有时候喷一喷做UI的小姑娘;下午开会的时候我当着全组人的面指责了我的项目经理-我们原来有个给A公司做的项目,然后他要给B公司出一套同样的东西,把UI给换掉,他不理解我说的XX不好实现是为什么,他的意思:

我觉得这个XXXX你可以这么实现,而且这不就是换套皮肤么,没事儿的,很简单。我说你这个东西设计成这样本身就不合理,你给看的交互图是根据ios来设计的,你要硬套在安卓上,加上有屋里返回按键就会有很多逻辑上的跳转问题,然后我解释了一大通。他问我安卓设计是什么样的,并问与会的人谁用安卓手机来讲一讲。

我就挤出是个人都能看出特别假的笑容跟他说:别问了,我给你出几个方案,你来选吧。

------------分割线------------谢谢题主看了我上面说的废话。

你还会想到“android开源项目”甚至“android本身”么? 我应该算是从htc那个翘屁股G3开始,一直到前一阵子才换的Nexus5,大大小小经历了20、30台手机,什么品牌的都有,着实算是“玩了个遍”。我大三的时候不挣钱,又想换手机,拿着自己的大学学费去买手机,玩十几二十天再卖掉,甚至倒卖了一阵子手机---后来学费拖到快毕业才交。在我开始真正接触android开发的时候,我的老师告诉我移动MM平台在各大高校里面有比赛,开发Android程序的,说咱们学校几乎可以内定,我花了二十多天的不眠之夜搞了个app,结果不了了知了。我不甘心自己做的东西就这么结束,又开始研究在各大市场上线,自己去做推广,各大轮胎发帖;直到后来某个小的广告平台推广员(为了避嫌我就不说名字了)联系我,说让我用他们的广告,我又开始研究什么是CPM,CPC;广告出来了效益不好,很捉急,我就又直到了app annie,友盟这种东西;自己玩够了,去公司,我们那个小公司,我又了解了我的五险一金的实际作用,年审是什么东西;项目可能不大,但是有些理论知识又像什么PMP的,又开始学习。

我一直没机会,其实主要还是自己脑子笨,没空学习基础知识,没学C/C++。

------------分割线------------我不知道说到这里,你有没有点明白我的意思了? 说句很显而易见的话:【android开源项目】在你的实际工作中,只是很小很小很小的一部分。它是建立在很多基础知识之上,就像人类穷尽一生甚至永生去研究数学,物理学,而工业发展只是近二百年的事情。你学习计算机,写代码,应该学习的是数学思想,逻辑思想和抽象方法。

有点吹牛逼的意思哈哈,扯远了。

然后我们再回来说说你的实际面试情况:

1.面试官素质确实有参差不齐的情况,如果你面试的次数多就会知道,这点你不必太介意。面试官就算技术本领再高超,多数也都是“屌丝程序员(„„)”,都会有个人喜好。我不忌讳地说,如果有个美女过来被我面试,她什么都不会,我也愿意要进来教她,因为她站着就好了啊;相反如果一个技术非常高超的牛逼哄哄地人,我直接说长得丑吧(对不起题主我没有别的意思„),可能我的第一印象就不会好,如果我当天心情不好,那么我很有可能也会故意刁难你。

所以这点可能只能怪你运气不好。

2.面试的技巧性确实非常大,有些网文《你所不知道的面试21个技巧》《如何抓住面试官的心》这种是可以参考的。一般来说,出于最最基本的礼貌,那个面试官再刁难你也不会一个劲地喷你吧?他在问你你不会的问题的时候,你可以尝试用另一种方式将他引导开,或者是避开这个问题。比如他问你C语言的预编译,你就跟他扯java语言由于特性xxx编译型语言和解释型语言xxx可以换种方式实现xxx我以前的一个项目„„你从你的语言里面放出大量的“可以”让面试官提问的问题,并且确定这是你熟悉或者了解的(一定!),这样他就会按照你的思路走了。

3.底子一定要硬,一定要诚实。我面试过不少从xx培训学校出来的学生,那个简历上写的各种语言、各种架构、各种工具熟练掌握把我都快要吓尿了,然后工资要2000块。这种就是非常让面试官反感的做法,特别是程序员多多少少地都有些傲气,你可以稍微夸大一点点,但绝对不能胡说八道。自己的必须是有点料的,你不能纯凭一张嘴去应聘纯技术岗,即便进去了,怕也是呆不长。

不过,如果第二条中,有些比较一根筋(蠢)的面试官非得“我不想听你说这些,你就告诉我C语言的预编译原理就可以了。” 呵呵自求多福吧少年。

面试的过程不要把自己看的太低,刚毕业的时候谦逊点可以,如果工作很多年了,还因为一个普通面试而感到郁闷,就有点经验不足了。面试本身就是个双选的过程,你觉得我技术不合格,我的思想太胡扯,你可以不要我;同样,我觉得你这个项目经理足够蠢,HR足够装逼,我也可以拍拍屁股走人。本身就是很平等的关系,而且我接触的人至少有一半,如果你不放高姿态,他们就会觉得你不够专业。

其次是有关你认为的QQ各种软件对Android端的“不重视”,我给说一句话吧: 在其位,谋其职,尽其责。又或者:

是粑粑总有被拉出来的时候,别整天像个屁一样空想。

原谅我的粗俗,如果你真的出于对qq邮箱android版的喜爱,你自己做一套你心目中遵循“Android设计规范”的demo,再拿去腾讯面试,并给面试官详细讲解。面试官还会问你这些你看起来不着边的问题么?

你让我跟你谈开源项目,我随便找一个你能告诉我它的实现原理么? 你让我跟你谈安卓设计,我说一条pattern你能告诉我具体内容么? 你又让我跟你谈二叉树,二叉树和散列表在亿级数据查找的优缺点你确定你能说得滴水不漏么?

其三,不要对大公司有盲目崇拜。

我不知道你用没用过微信的api,反正我用微信的几个开放api,相比起支付宝的和百度的: 简直就是烂的一比!!不多说了全是泪。

最后,你的认识上有了偏差。我刚毕业的时候还去过另一个某国内大型外包公司面试,那个人根本不想给我好好面试。迟到、办公室破旧、而且对我出言不逊。当时作为一个刚毕业的大学生,也就因为我是个男人才没哭出来。至今我对那家公司非常厌恶。这样是不好滴!

答主你看看,只是你去的时候,由于某个或者某些原因,那个人故意刁难你也好,自己水平不好也罢,当天的面试没有通过而已,跟什么“为什么有公司或者架构师会用ios的思维来找android程序员,并根据ios开发android程序呢”一毛钱关系都没有!你又不是“有公司”或者“架构师”,你怎么知道他们是这么想的?

作为一个程序员,别总用主观臆想才揣测现实世界,那是女人和韩寒做的事情。

我建议答主,多运动运动,学学别的知识,把自己的知识面无限地拓宽,然后抓一门知识深入研究,到下次面试时候:“其他的我可能没做过不太了解,但是有关这方面的东西,你随便问”。

如果一两年以后再接到腾讯HR的电话,可以告诉我一声:)desmo的回答楼主挺扯的,android开源项目ActionBarSherlock/SlidingMenu/Android-ViewPagerIndicator/Android-PullToRefresh,这玩意谁不会用?其他不多说SamuraiSong的回答题主应聘的职位应该是T3级别以上的

腾讯对于T3要求蛮严格的,除了本身专业方向要足够强之外,其他一些专业性知识也要过硬才可以

就像数据结构,编译原理,包括C/C++

找个ios来面试你说明人家至少T3.2以上了,又不是来面试你android的,是来面试你“其他”专业知

识的,至于为什么android的没来,我估计是因为他们觉得你“其他”的不行,T3肯定没戏,又没有

T2的名额,索性就不浪费大家的时间了

我曾经去面过一次OMG,从内部得到的消息是T3以上 IOS必须会android ,Android必须熟练C/C++

当也是没有T2职位,就不了了之了辜水鑫2010的回答我大三在腾讯实习,做ios开发的。我选择的是android开发,之前只学过android开发,没有ios经验,最后还是去了做ios。

面试官是我的leader,组长,面试主要是c

c++ 操作系统 数据结构和算法。

我身边很多同事,也反映没有问ios开发的问题,还有同事之前是做赛班的。个人觉得,基础比ios技能重要,基础好,学习ios就一个月半个月的事。最怕的是,基础不好,不懂指针内存性能优化,即使会ios开发,写出来的代码也可能有问题。而且我2013年实习时,那个项目很多类没有用arc,要自己管理内存,这个就是看你以前基础了。

作为程序员,基础很重要,技能也很重要。两个平衡发展,才能在事业上更上一层楼。谢谢!马天翼的回答我来说说我的看法。

题主所说的那些安卓开源组件,不过是使用上去看看doc的问题,而且大公司手写也就分分钟的事情,如果面试官问我这些怎么用,我才觉得不好呢。其实题主说反了,这些组件才是偶尔一个项目拿来用一下罢了,而且只是在项目的初期用一次罢了。比如QQ之前没有SlidingMenu,现在5.0才有,也就是自己做一下,会这些很熟练有什么用?你加入微信组了,根本连写这个的机会都没有。

我个人觉得有没有在github上去提交过这些开源组件的bug,参与改进才是一个考核标准吧。什么ActionBarSherlock,现在Google官方也不推荐使用了,你看,用的再熟悉,现在也没用了吧。

然后这些二叉树、性能的问题,才是一个程序员的内功,这些问题都搞懂了,说明挑战问题的能力就锻炼上来了。腾讯重视基础嘛,这是人家公司招人的特色,因为产品驱动的话,变化快,我觉得个人喜好问题,没有必要黑人家。我们公司在腾讯Linux后台开发的现在出来做首席安卓开发男神的就很厉害啊。

专业技能固然重要,但是也是可以突击的,更重要的解决问题的能力嘛。AF知识网用户的回答显然,面试官不会关注你会不会用 “Android本身,Android开源项目ActionBarSherlock/SlidingMenu/Android-ViewPagerIndicator/Android-PullToRefresh,也不会关注android设计的qq邮箱android客户端会有多NB”。

面试官关心的是你能不能写出像“ActionBarSherlock/SlidingMenu/Android-ViewPagerIndicator/Android-PullToRefresh”这样NB的东西。可写出这样NB的东西,连数据结构都不懂,又怎么能让面试官信服?

对于一个项目管理人员而言,会不会用只是时间问题,工作量问题,你一天不会,一星期应该可以了吧? 但能不能帮我提出方案,解决问题才是真正的能力问题。这就是兵和将的区别。well cheng的回答赞同 我现在就是如此 iOS开发 基本上项目就是Google的 那里不会找哪里 然后各种类随便用

但是 你让我自己撸一个出来 呵呵 无从下手啊 普通公司可能会希望找你这样的熟手 但是大公司么 框架基本都是自己开发 类库啊什么的 比如我知道的阿里的js库 至于iOS面试安卓 要我说啊 你知道人家只是做iOS的吗 说不定人家上个月撸服务器呢 这个月刚好分配做 iOS 而且分分钟上手了 最后勉励一下 我现在也打算在代码的设计上 以及算法上下功夫 不想只做一个API调用者 邹云浩的回答楼主刚毕业的?宝术的回答除了考察基本功之外,招聘还是有公司特色和运气的,腾讯以前曾规定不管招什么技术岗位,都要考C++,近两年才取消。因为腾讯是C++起家,Java在腾讯是小众语言,自然iOS会更重视,android相关技术一定没有iOS强势。

同样,阿里巴巴是Java起家,C++在阿里是小众语言,自然android会更受重视,我们面试iOS程序员都可能用Java面试官去面的,哈哈,简历一多,什么种类面试官都要上了。心理平衡一点吧,大公司是有更多资本筛选他要的人,只是适合不适合而已。如果你的基本功不扎实,进了腾讯也未必能有很好的晋升机会,因为长远来看大公司要的是写组件的人,而不是用组件的人。AF知识网用户的回答面试的时候,面试官交流表象枝叶特征的知识点,侧面证明他对你的工作能力质疑。

如果交流的是本质的通用的架构特征的知识点,侧面证明他认可了你的工作经验,探讨的是你未来的职业可能性以及是否能够胜任未知需求。蒋奇的回答码农就是打杂的„„具体产品设计、需求啥的不是产品经理和设计师的工作嘛,人家分工明确釜山的回答数据结构和算法,程序员永远的话题!AF知识网用户的回答我猜是因为腾讯想统一多平台风格 而统一多平台风格在中国最省事的办法就是都用iphone风格

技术永远以市场为导向。对于这个产品来说钻研android的投入产出比不经济吧。卢景伦的回答先回答题主第一个关于为什么被鄙视的问题。

其实说真的考官没错,最大原因在于:微信部门在整个腾讯地位超然,看作是未来的第二个互娱。这个原因就导致不管是内部员工还是外部人才均涌向微信。在这个可大量挑选牛人的基础上,提问的人不具有任何明显优于其他人的特长(在你描述中)。这里不是说提问的人没能力,但是我作为android开发来说,android开发比桌面开发 web开发 后台linux开发要更难吗?所谓android开发 桌面开发在你深入了解其中原理后有区别吗?· 这个哪个方面的考官面试你根本不重要,ios android在内部t3级人物看来不过是需要一两个月就能玩得比我们更溜的东西而已,比window开发 后台linux开发简单多了。

再稍微说下关于微信android iPhone风格问题~~这不是程序猿能够决定的东西~~~~~·

5.ios面试简历模版 篇五

2.向下拖动tableView,当cell1完全移出屏幕,并且 cell11(它也是alloc出来的,原因同上)完全显示出来的时候。cell11加入到visiableCells,cell1移出 visiableCells,cell1加入到reusableTableCells。

3.接着向下拖动tableView,因为reusableTableCells中已 经有值,所以,当需要显示新的cell, cellForRowAtIndexPath再次被调用的时 候,tableView dequeueReusableCellWithIdentifier:CellIdentifier,返回cell1。cell1加入到visiableCells,cell1 移出reusableTableCells;cell2移出 visiableCells,cell2加入到reusableTableCells。之后再需要显示的Cell就可 以正常重用了

2.在一个tableView 中需要自定义多种样式的cell(两种或三种),通常你如何实现,说说思路即可? 比如:有100条数据,iPhone一屏最多显示10个cell。程序最开始显示TableView的情况是: 1.用[[UITableViewCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:CellIdentifier] 创建10次cell,并给cell指定同样的重用标识(当然,可以为不同显示类型的cell指定不同的标识)。并且10个cell全部都加 入到 visiableCells数组,reusableTableCells为空。

2.向下拖动tableView,当cell1完全移出屏幕,并且 cell11(它也是alloc出来的,原因同上)完全显示出来的时候。cell11加入到visiableCells,cell1移出 visiableCells,cell1加入到reusableTableCells。

3.接着向下拖动tableView,因为reusableTableCells中已 经有值,所以,当需要显示新的cell, cellForRowAtIndexPath再次被调用的时 候,tableView dequeueReusableCellWithIdentifier:CellIdentifier,返回cell1。cell1加入到visiableCells,cell1 移出reusableTableCells;cell2移出 visiableCells,cell2加入到

reusableTableCells。之后再需要显示的Cell就可 以正常重用了

3.UITableView的性能优化? 滑动的时候有种卡的感觉是为什么?怎么解决?

然而在使用第三方应用时,却经常遇到性能上的问题,普遍表现在滚动时比较卡,特别是table cell中包含图片的情况时。实际上针对性地优化一下就可以解决tableView滑动的时候卡顿的问题, 在iOS应用中,UITableView应该是使用率最高的视图之一了。iPod、时钟、日历、备忘录、Mail、天气、照片、电话、短信、Safari、App Store、iTunes、Game Center⋯几乎所有自带的应用中都能看到它的身影,可见它的重要性。然而在使用第三方应用时,却经常遇到性能上的问题,普遍表现在滚动时比较卡,特别是table cell中包含图片的情况时。

实际上只要针对性地优化一下: 1>同一时间其实只需要存在一屏幕的cell对象即可,不需要为每一行创建一个cell。

UITableView是UIScrollView的子类,因此它可以自动响应滚动事件(一般为上下滚动)。它内部包含0到多个UITableViewCell对象,每个table cell展示各自的内容。当新cell需要被显示时,就会调用tableView:cellForRowAtIndexPath:方法来获取或创建一个 cell;而不可视时,它又会被释放。由此可见,同一时间其实只需要存在一屏幕的cell对象即可,不需要为每一行创建一个cell。此 外,UITableView还可以分为多个sections,每个区段都可以有自己的head、foot和cells。而在定位一个cell时,就需要2 个字段了:在哪个section,以及在这个section的第几行。这在iOS SDK中是用NSIndexPath来表述的,UIKit为其添加了indexPathForRow:inSection:这个创建方法。其他诸如编辑之类的就不提了,因为和本文无关。

介绍完原理,接下来就开始优化吧。

使用不透明视图。

不透明的视图可以极大地提高渲染的速度。因此如非必要,可以将table cell及其子视图的opaque属性设为YES(默认值)。其中的特例包括背景色,它的alpha值应该为1(例如不要使用clearColor);图像的alpha值也应该为1,或者在画图时设为不透明。

不要重复创建不必要的table cell。

前面说了,UITableView只需要一屏幕的UITableViewCell对象即可。因此在cell不可见时,可以将其缓存起来,而在需要时继续使用它即可。而UITableView也提供了这种机制,只需要简单地设置一个identifier即可:

static NSString *CellIdentifier = @“xxx”;UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:CellIdentifier];if(cell == nil){ cell = [[[UITableViewCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:CellIdentifier] autorelease];} 值得一提的是,cell被重用时,它内部绘制的内容并不会被自动清除,因此你可能需要调用setNeedsDisplayInRect:或setNeedsDisplay方法。此 外,在添加table cell的时候,如果不需要动画效果,最好不要使用insertRowsAtIndexPaths:withRowAnimation:方法,而是直接调 用reloadData方法。因为前者会对所有indexPaths调用tableView:cellForRowAtIndexPath:方法,即便该 cell并不需要显示(不知道是不是bug),这就可能创建大量多余的cell。勘误:只是在模拟器上测试如此,真机调试时没有这种bug。

减少视图的数目。

UITableViewCell包含了textLabel、detailTextLabel和imageView等view,而

你还可以自定义一些视图放在它的contentView里。然而view是很大的对象,创建它会消耗较多资源,并且也影响渲染的性能。如果你的table cell包含图片,且数目较多,使用默认的UITableViewCell会非常影响性能。奇怪的是,使用自定义的view,而非预定义的view,明显会快些。当然,最佳的解决办法还是继承UITableViewCell,并在其drawRect:中自行绘制:

-(void)drawRect:(CGRect)rect { if(image){ [image drawAtPoint:imagePoint];self.image = nil;} else { [placeHolder drawAtPoint:imagePoint];} [text drawInRect:textRect withFont:font lineBreakMode:UILineBreakModeTailTruncation];} 不过这样一来,你会发现选中一行后,这个cell就变蓝了,其中的内容就被挡住了。最简单的方法就是将cell的selectionStyle属性设为UITableViewCellSelectionStyleNone,这样就不会被高亮了。此外还可以创建CALayer,将内容绘制到layer上,然后对cell的contentView.layer调用addSublayer:方法。这个例 子中,layer并不会显著影响性能,但如果layer透明,或者有圆角、变形等效果,就会影响到绘制速度了。解决办法可参见后面的预渲染图像。

不要做多余的绘制工作。

在实现drawRect:的时候,它的rect参数就是需要绘制的区域,这个区域之外的不需要进行绘制。例如上例中,就可以用CGRectIntersectsRect、CGRectIntersection或CGRectContainsRect判断是否需要绘制image和text,然后再调用绘制方法。

预渲染图像。

你会发现即使做到了上述几点,当新的图像出现时,仍然会有短暂的停顿现象。解决的办法就是在bitmap context里先将其画一遍,导出成UIImage对象,然后再绘制到

屏幕,详细做法可见《利用预渲染加速iOS设备的图像显示》。

不要阻塞主线程。

做到前几点后,你的table view滚动时应该足够流畅了,不过你仍可能让用户感到不爽。常见的现象就是在更新数据时,整个界面卡住不动,完全不响应用户请求。出现这种现象的原因就是主线程执行了耗时很长的函数或方法,在其执行完毕前,无法绘制屏幕和响应用户请求。其中最常见的就是网络请求了,它通常都需要花费数秒的时间,而你不应该让用户等待那么久。解决办法就是使用多线程,让子线程去执行这些函数或方法。这里面还有一个学问,当下载线程数超过2时,会显著影响主线程的性能。因此在使用 ASIHTTPRequest时,可以用一个NSOperationQueue

来维护下载请求,并将其

maxConcurrentOperationCount设为2。而NSURLRequest则可以配合GCD来实现,或者使用NSURLConnection的setDelegateQueue:方法。当然,在不需要响应用户请求时,也可以增加下载线程数,以加快下载速度:

-(void)scrollViewDidEndDragging:(UIScrollView *)scrollView willDecelerate:(BOOL)decelerate { if(!decelerate){ queue.maxConcurrentOperationCount = 5;} }(void)scrollViewWillBeginDragging:(UIScrollView *)scrollView { queue.maxConcurrentOperationCount = 2;} 此外,自动载入更新数据对用户来说也很友好,这减少了用户等待下载的时间。例如每次载入50条信息,那就可以在滚动到倒数第10条以内时,加载更多信息:

-(void)tableView:(UITableView *)tableView willDisplayCell:(UITableViewCell *)cell forRowAtIndexPath:(NSIndexPath *)indexPath { if(count-indexPath.row < 10 &&!updating){ updating = YES;[self update];} }// update方法获取到结果后,设置updating为NO 还有一点要注意的就是当图片下载完

成后,如果cell是可见的,还需要更新图像:

NSArray *indexPaths = [self.tableView indexPathsForVisibleRows];for(NSIndexPath *visibleIndexPath in indexPaths){ if(indexPath == visibleIndexPath){ MyTableViewCell *cell =(MyTableViewCell *)[self.tableView cellForRowAtIndexPath:indexPath];cell.image = image;[cell setNeedsDisplayInRect:imageRect];break;} }// 也可不遍历,直接与头尾相比较,看是否在中间即可。最后还是前面所说过的insertRowsAtIndexPaths:withRowAnimation:方法,插入新行需要在主线程执行,而一次插入很多行的话(例如50行),会长时间阻塞主线程。而换成reloadData方法的话,瞬间就处理完了。l 4 tableview的cell里如何嵌套collection view?

思路同网易新闻类似, 用自定义的继承自UITableViewCell的类, 在initWithFrame的构造方法中, 初始化自定义的继承自UICollectionView的类 下拉和上拉的原理? 上拉和下拉的原理可以参照新浪微博的上拉和下拉刷新, 以tableView的上拉刷新为例:

1> 为了进行无缝阅读, 通过tableView的代理方法, willDisplayCell判断是否是最后一行,2> 如果是最后一行, 在显示最后一行的同时, 判断当前是否存在上拉刷新 3> 如果当前没有上拉刷新, 就进行加载数据, 启动”橘花”

以tableView的下拉刷新为例: 1> 判断当前的上拉刷新视图是否动画

上一篇:未来的书籍作文下一篇:伦敦传媒学院简介