iOS笔试题
1. 什么是ARC/MRC,ARC无法管理内存的情况?
答案
1.ARC: 自动引用计数。OC自动内存管理机制,
2.区别于MRC需要手动管理引用计数retain或release 对引用计数+1 -1操作。这种操作耗费精力容易出错,比如在多线程操作有时不确定哪个线程最后使用完毕,在模块化时对象被多个模块创建和使用,不能确定最后由谁去释放
。无法管理内存的情况?
**1***Block或Delegate的循环引用解决的方法:掐断其中的一条强引用,使之变成弱引用,变成这样,就打破了循环引用: __weaktypeof (self) weakSelf =self; Delegate要用weak修饰
***2**NSTimer未释放
在使用NSTimeraddtarget时,为了防止 target 被释放而导致的程序异常,timer 会强引用 target,所以这也是一处内存泄露的隐患。解决方法是使用线程安全的MSWeakTimer,然后在dealloc中主动调用invalidate
**3***非OC对象
iOS笔试题
2.如何理解 retain/copy/assign/release/autor release/dealloc关键字? 答案
copy:建立一个索引计数为1的对象,然后释放旧对象,主要用于nsstring; retain:释放旧的对象,将旧对象的值赋予输入对象,再提高输入对象的索引计数为1
对其他NSObject和其子类
assign: 简单赋值,不更改索引计数 release:手动释放对象;
dealloc:它的作用是,当对象的引用计数为0,系统会自动调用dealloc方法,回收内存。
autorelease 原理: a.先建立一个autorelease pool
b.对象从这个autorelease pool里面生成。
c.对象生成 之后调用autorelease函数,这个函数的作用仅仅是在autorelease pool中做个标记,让pool记得将来release一下这个对象。
d.程序结束时,pool本身也需要rerlease, 此时pool会把每一个标记为autorelease的对象release一次。如果某个对象此时retain count大于1,这个对象还是没有被销毁。
(weak和strong)不同的是 当一个对象不再有strong类型的指针指向它的时候 它会被释放 ,即使还有weak型指针指向它。weak表示如果还没有人指向它了,它就会被清除内存,同时被指向nil
iOS笔试题
请简述页面传值都有哪些实现方式
代理、block、通知、属性传值、单例传值、NSUserDefault
3.UITableView有哪些优化方式
答案
1、 提前计算并缓存好高度(布局),因为heightForRowAtIndexPath:是调用最频繁的方法;
2、异步绘制,遇到复杂界面,遇到性能瓶颈时,可能就是突破口; 3、滑动时按需加载,这个在大量图片展示,网络加载的时候很管用 4、Cell的复用
5、尽量少使用或者不用透明的图层 6、用异步加载数据,缓存请求结果 7、减少subView的数量 8、异步刷新 9、提前注册
4.解释nonatomicatomic的区别
答案
nonatomic非原子性访问 atomic原子性访问
不用修饰atomic的原因?
1.atomic所说的线程安全只是保证了getter和setter存取方法的线程安全,并不能保证整个对象是线程安全的,在多线程操作时会出现数据错乱或崩溃。