ios面试题

1.『卡顿』(特指不流畅的动画)是App开发中最为常见的性能问题表现。请结合你所熟悉的移动操作系统(AndroidiOS Windows Phone),解释一下App中卡顿的发生机理,并分别针对『界面切换卡顿』和『屏幕滑动卡顿』提出典型的优化思路。

1.网络请求放在主线程中,如果网速低会使系统响应延迟。处理方法:网络请求放入子线程中。UI的刷新放在主线程中。

2.UITableView表格卡顿,要使用以下做法:

    

  • static   NSString  *CellIdentifier =  @"Cell" ;  
  •   
  •     UITableViewCell  *cell = [tableView  dequeueReusableCellWithIdentifier:CellIdentifier];  
  •     if  (cell ==  nil ) {  
  •         cell = [[UITableViewCell alloc ]  initWithStyle :UITableViewCellStyleSubtitle reuseIdentifier :CellIdentifier];  
  •     }  


    创建一个cell储蓄池,把不加载的cell放入储蓄池中。当加载新的cell的适合,先从储蓄池中查找有没有可以复用的cell,如果有,拿来用即可;如果没有则创建新的。

3.动画和UI的卡顿,尽量避免一次性在内存中加载过多的子控件。




Android IOS 主线程阻塞可能导致界面卡顿; Android 有可能由于大量对象创建很快又被回收 内存抖动导致界面卡顿(GC执行时 整个线程停下来) 

Android: {

界面切换卡顿:1.查看目的界面是否有可以重用的对象避免对象无谓的创建;

              2.相关操作交给非UI线程来执行

              3.避免不必要的文件读写


界面滑动卡顿: 同上

               1.考虑只加载当前界面显示部分的数据,显示哪里加载哪里,而不是重头加载到尾

               2.使用缓存避免重复网络请求

              


}

2.关于浅复制和深复制的说法,下列说法正确的是

  • 浅层复制:只复制指向对象的指针,而不复制引用对象本身。
  • 深层复制:复制引用对象本身。
  • 如果是浅复制,修改一个对象会影响另外一个对象
  • 如果是深拷贝,修改一个对象不会影响到另外一个对象

深层拷贝 也叫做深拷贝,个人的理解应该是 拷贝了引用对象的内存,这样就会产出两块不同的内存区,而浅拷贝则是两条或多条指针指向了相同的同一块内存区域。


所以 A BD 正确,


3.为什么说Object-Cruntime language?

  • A:将数据类型的确定由编译时,推迟到了运行时
  • 运行时机制使我们直到运行时才去决定一个对象的类别,以及调用该类别对象指定方法。
  • 驾驶A继承了B类,那么在编译时就已经生成了A的实例
  • 多态是指不同对象以自己的方式响应相同的消息的能力
  • Aoc中的数据类型在编译时确定,不应该是在运行时。
  • B 正确。
  • C 创建对象实例需要开辟内存空间,所以应该在运行时。
  • D 多态是指,父类指针指向子类对象的一种表现。

  • Objective-C Runtime有相当多的特性,首先数据类型是指数据而非对象的类型,数据一般是在编译时就已经确定类型。故A错,对象的类型判定是运行时决定的,运行时通过判别对象的类型,然后给对象发送消息(即调用对象的方法)。
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值