IOS培训
美国上市IOS培训机构

400-111-8989

热门课程

iOS常用经典面试题解析

  • 时间:2017-03-09
  • 发布:iOS培训
  • 来源:IOS职场

今天来为大家总结一下iOS面试中的一些基础题型,请大家留意这几个知识点。

1. Object-C的内存管理?

<1.当你使用new,alloc和copy方法创建一个对象时,该对象的保留计数器值为1.当你不再使用该对象时,你要负责向该对象发送一条release或autorelease消息.这样,该对象将在使用寿命结束时被销毁.

<2.当你通过任何其他方法获得一个对象时,则假设该对象的保留计数器值为1,而且已经被设置为自动释放,你不需要执行任何操作来确保该对象被清理.如果你打算在一段时间内拥有该对象,则需要保留它并确保在操作完成时释放它.

<3.如果你保留了某个对象,你需要(最终)释放或自动释放该对象.必须保持retain方法和release方法的使用次数相等.

2. 为什么很多内置的类,如TableViewController的delegate的属性是assign不是retain? 所有的引用计数系统,都存在循环应用的问题。例如下面的引用关系:

• 对象a创建并引用到了对象b.

• 对象b创建并引用到了对象c.

• 对象c创建并引用到了对象b. 这时候b和c的引用计数分别是2和1。当a不再使用b,调用release释放对b的所有权,因为c还引用了b,所以b的引用计数为1,b不会被释放。b不释放,c的引用计数就是1,c也不会被释放。从此,b和c永远留在内存中。

这种情况,必须打断循环引用,通过其他规则来维护引用关系。比如,我们常见的delegate往往是assign方式的属性而不是retain方式 的属性,赋值不会增加引用计数,就是为了防止delegation两端产生不必要的循环引用。如果一个UITableViewController 对象a通过retain获取了UITableView对象b的所有权,这个UITableView对象b的delegate又是a, 如果这个delegate是retain方式的,那基本上就没有机会释放这两个对象了。自己在设计使用delegate模式时,也要注意这点。

3. 定义属性时,什么情况使用copy、assign、retain? assign用于简单数据类型,如NSInteger,double,bool, retain和copy用于对象, copy用于当a指向一个对象,b也想指向同样的对象的时候,如果用assign,a如果释放,再调用b会crash,如果用copy 的方式,a和b各自有自己的内存,就可以解决这个问题。 retain 会使计数器加一,也可以解决assign的问题。 另外:atomic和nonatomic用来决定编译器生成的getter和setter是否为原子操作。在多线

程环境下,原子操作是必要的,否则有可能引起错误的结果。 加了atomic,setter函数会变成下面这样: if (property != ewValue) { [property release]; property = [newValue retain]; }

4. 对象是什么时候被release的?

引用计数为0时。 autorelease实际上只是把对release的调用延迟了,对于每一个Autorelease,系统只是把该Object放入了当前的Autorelease pool中,当该pool被释放时,该pool中的所有Object会被调用Release。对于每一个Runloop, 系统会隐式创建一个Autorelease pool,这样所有的release pool会构成一个象CallStack一样的一个栈式结构,在每一个Runloop结束时,当前栈顶的Autorelease pool会被销毁,这样这个pool里的每个Object(就是autorelease的对象)会被release。那什么是一个Runloop呢? 一个UI事件,Timer call, delegate call, 都会是一个新的Runloop.

今天达内ios培训为大家准备的iOS面试题,你都答对了么?达内科技希望能看到你过关斩将的自信!

上一篇:12道不错的iOS面试题
下一篇:如何成为更高级别的iOS开发工程师?

iOS开发:腾讯二面经验分享

该怎么选择IT培训机构?哪些类型的人适合IT培训

iOS 秋招总结 = 面经 + 闲言碎语(携程、阿里、京东、腾讯)

iOS面试题集合(BAT及各大中小型公司)

选择城市和中心
贵州省

广西省

海南省