iOS面试题5

iOS面试题5



1.为什么很多内置类比如UITableViewController的delegate是assign?
为了防止互相持有导致的不能被释放的问题。
使用retain修饰delegate会使delegate的引用计数加1,如果互为代理,则会导致双方互相持有,最终任何一方都不能被释放掉。而使用assign不会影响计数器,在使用结束后能被及时释放。



2.什么是懒加载?
如果应用需要加载的内容很多,那么就需要很长时间来进行启动。
懒加载就是在使用到对应的内容的时候才进行加载,这样可以缩短启动的时间。
3.自动释放池(NSAutoreleasepool)是怎么工作的?
自动释放池是以栈的形式实现的:当你创建一个新的自动释放池时候,它将被添加到栈顶。当一个对象收到发送autorelease消息时,它被添加到当前线程的处于栈顶的自动释放池中,当自动释放池被回收时,它们从栈中被删除,并且会给池子里面所有的对象都会做一次release操作。
一般来说在应用的main thread中,已经存在了一个autorelease pool
有两种情况需要开发者自己新建autorelease pool
1)在main thread中,在某个方法中出现大量的autoreleased objects,为了避免memoryfootprint的增大,可以手动创建一些autorelease pool用来drain objects
2)创建新的thread,并在其中访问了Cocoa,需要在访问之前创建autorelease pool,访问结束后用来drain objects


3)在每个thread中都会维持一个stack,其中放置着所有在这个thread中创建但未销毁的pool,每当一个新的pool创建后,它就位于stack的最顶端,相应的autoreleased object就会放入其中,当pool drain的时候,它就会从stack的顶端移除,并且release掉其中包含的objects




4.描述一下重用机制。
重用机制的目的:效率,内存
可视cells数组保存当前显示的cells;
重用cells保存可以重用的cells。
tableview显示之初,重用cells是空的,使用[tableView dequeueReusableCellWithIdentifier: forIndexPath:]返回nil


开始的时候,cell都是通过alloc init创建的
比如有100条数据,但是屏幕只能显示10个cell


1)最开始的时候使用alloc init创建10次cell,并给cell指定重用标识.
10个cell全部加入可见cells,重用cells为空.


2)当向下拖动屏幕的时候,第一个cell-1,完全移出屏幕,cell-11(使用alloc init创建)完全显示出来的时候。cell-11加入可见cells,cell-1移出可见cells,并加入到重用cells。


3)接着向下拖动tableview,因为重用池里面已经有cell,
所以当需要显示新的cell的时候,[tableView dequeueReusableCellWithIdentifier: forIndexPath:]返回cell-1.
cell-1加入到可见cells,移出重用cells,cell-2移出可视cells,加入到重用cells里面.之后再要显示cell就可以重用了。


5.POST和GET的区别?
1)给服务器传输数据的方式:
GET:通过网址字符串
POST:通过data


2)传输数据的大小
GET:通过网址字符串最多255字节
POST:使用NSData容量超过1G


3)安全
GET:所有传给服务器的数据显示在网址里,类似于密码的明文输入,直接可见。
POST:数据被转成NSData(二进制数据),类似于密码的密文输入,无法直接读取。





























著作权声明:本文由http://www.bestnathan.com/原创,欢迎转载分享。请尊重作者劳动,转载时保留该声明和作者博客链接,谢谢
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值