黑马程序员技术交流社区

标题: 就业面试(摘自招聘一个靠谱的 iOS 程序员) [打印本页]

作者: 夜空守望者    时间: 2015-9-5 10:02
标题: 就业面试(摘自招聘一个靠谱的 iOS 程序员)
32. objc使用什么机制管理对象内存?
通过 retainCount 的机制来决定对象是否需要释放。 每次 runloop 的时候,都会检查对象的 retainCount,如果retainCount 为 0,说明该对象没有地方需要继续使用了,可以释放掉了。
33. ARC通过什么方式帮助开发者管理内存?
编译时根据代码上下文,插入 retain/release
34. 不手动指定autoreleasepool的前提下,一个autorealese对象在什么时刻释放?(比如在一个vc的viewDidLoad中创建)
分两种情况:手动干预释放时机、系统自动去释放。
        1. 手动干预释放时机--指定autoreleasepool 就是所谓的:当前作用域大括号结束时释放。
        2. 系统自动去释放--不手动指定autoreleasepool
Autorelease对象会在当前的 runloop 迭代结束时释放。
如果在一个vc的viewDidLoad中创建一个 Autorelease对象,那么该对象会在 viewDidAppear 方法执行前就被销毁了。
参考链接:《黑幕背后的Autorelease》
36. 苹果是如何实现autoreleasepool的?
autoreleasepool以一个队列数组的形式实现,主要通过下列三个函数完成.
        1. objc_autoreleasepoolPush
        2. objc_autoreleasepoolPop
        3. objc_aurorelease
看函数名就可以知道,对autorelease分别执行push,和pop操作。销毁对象时执行release操作。
37. 使用block时什么情况会发生引用循环,如何解决?
一个对象中强引用了block,在block中又使用了该对象,就会发射循环引用。 解决方法是将该对象使用__weak或者__block修饰符修饰之后再在block中使用。
        1. id weak weakSelf = self; 或者 weak __typeof(&*self)weakSelf = self该方法可以设置宏
        2. id __block weakSelf = self;
38. 在block内如何修改block外部变量?
默认情况下,在block中访问的外部变量是复制过去的,即:写操作不对原变量生效。但是你可以加上__block来让其写操作生效,示例代码如下:
__block int a = 0;
void  (^foo)(void) = ^{
    a = 1;
}
f00();
//这里,a的值被修改为1



43. 苹果为什么要废弃dispatch_get_current_queue?
dispatch_get_current_queue容易造成死锁

52. IBOutlet连出来的视图属性为什么可以被设置成weak?
参考链接: Should IBOutlets be strong or weak under ARC?
文章告诉我们:
因为既然有外链那么视图在xib或者storyboard中肯定存在,视图已经对它有一个强引用了。
不过这个回答漏了个重要知识,使用storyboard(xib不行)创建的vc,会有一个叫_topLevelObjectsToKeepAliveFromStoryboard的私有数组强引用所有top level的对象,所以这时即便outlet声明成weak也没关系

作者: 羊口羊口羊    时间: 2015-9-5 11:02
顶一下!!!!
作者: 唐肖虎    时间: 2015-9-5 19:33
这个必须要支持啊!
作者: dw4861    时间: 2015-9-5 19:36
互相交流,促进进步。
作者: 七爷上课前    时间: 2015-9-5 19:53
坏了,看着面熟,但都说不上来
作者: lxszl    时间: 2015-9-5 21:12
战略性保存备用
作者: 靳小龙    时间: 2015-9-5 21:14
收藏。。。。。
作者: Music_棍棍    时间: 2015-9-5 21:23
给力 不错
作者: 王鹏华ios0826    时间: 2015-9-5 21:25
顶一下!
作者: 驴小叔    时间: 2015-9-5 21:27
顶顶顶``````
作者: 一丢丢大人    时间: 2015-9-5 21:57
这个必须要支持啊!
作者: 0826iOS_sunzhen    时间: 2015-9-6 00:15
都是面试经典啊!收藏
作者: 荣荣    时间: 2015-9-6 06:06
顶一个!
作者: lixianzhu0712    时间: 2015-9-6 08:59
好棒!!!!!!!!
作者: a124113798    时间: 2015-9-6 11:19
lz很给力啊
作者: 荣荣    时间: 2015-9-7 00:44
很有用,先赞一个!争取成为抢手的程序员
作者: yuan121    时间: 2015-9-7 00:51
顶一个!
作者: tr2e    时间: 2015-9-7 09:17
nice  mark
作者: jianjiao    时间: 2015-9-7 09:35
感觉都还看不懂呢
作者: 王鹏华ios0826    时间: 2015-9-7 21:25
珍藏!互相交流!
作者: kylmetz    时间: 2015-9-7 21:37
了解了,收藏了~




欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2