ios面试题整理

1.简述视图控制器的生命周期        
在初始化的时候开始,到被移除之后生命周期结束
initWith…—>loadView—>viewDidLoad—>viewWillAppear—>viewDidAppear—>viewWillDisappear—>viewDidDisappear
初始化方法—>加载视图—>视图已经加载—>视图将要显示—>视图已经显示   —>视图将要消失     —>视图已经消失



2.代理作为属性的时候使用什么语义?为什么?        
    在ARC中用weak,在MRC中用assign,  防止循环引用,防止给被内存销毁的代理对象发送消息.


3.oc中有没有多继承?如果有,请简述,如果没有,那什么来完成类的扩展?    
    没有     类目,延展,协议


4.#import,#include,@class各有什么作用
    都可以引用头文件
    #import        在重复引用的时候不会出错        ==#inlude + #progrma once
    #include    存在c中,oc中也可以用
    @class         可以有效的避免头文件的循环引用


5.简述oc的内存管理机制
    (1)oc中在Xcode5编译的App以后(Max OS10.5),取消了GC(Garbage Collection垃圾回收机制),全面使用引用计数机制来管理内存。

    (2)在iOS开发当中,有MRC和ARC两种方式来管理内存,ARC是自动应用计数机制,仅仅是在MRC(手动引用计数)的基础上不全了内存管理的代码,并非GC。在MRC中,每当我们使用alloc、retain、copy、mutableCopy使对象的引用计数增加的时候,都要使用对应的release或者autoRelease来使对象的引用计数减少,增加和减少的次数要相等。在对象引用计数减为0的时候,会被发送dealloc消息,被内存销毁。

    (3)此外,开发中使用的其他框架的一些内容(比如CoreFoundation中的数据类型)要使用对应框架下的内存管理来操作数据。


6.oo语言的三大特性是什么?oo语言的核心是什么?
    oo语言的三大特性:封装,继承和多态  oo语言的核心是类和对象
    封装:把类的实现的细节放在类的内部,只把接口部分让外界看,实现放在类的内部
    继承子类从父类那拿到公有的方法和属性
    多态:父类指针可以指向子类对象,不同对象在相应相同消息的时候会有不同表现

7.懒加载是什么?有什么意义?
    重写一个属性的getter方法
    意义:1.保证内存不冗余开辟,需要的时候才开辟空间
        2.保证创建对象的代码不会反复执行


8.oc中集合类都有哪些?各有什么特点?
    数组,字典,集合
    1.都只能存储对象类型(字典的key值必须遵循NSCopying协议)
    2.字典和集合是无序的,数组是有序的
    3.字典是以key-value键值映射的关系存储数据的,集合元素唯一(在内存中是散列存储的)存取高效


9.什么是深拷贝?什么是浅拷贝?
    浅拷贝是一根指针指向了原有对象(只复制指向对象的指针,而不复制引用对象本身)。
    深拷贝是开辟了一块新的内存空间(OC里面没有真正意义上的深拷贝,除了归档和反归档)


10.内存被人为划分为几个区域?各有什么特点
    栈区,堆区,静态区,常量区,代码区

    int a = 10;  10不在任何区(10是即时数)

11. 请简述响应者链?
      AppDelegate—>UIApplication—>UIwindow—>根视图控制器(也就是自己创建的RootViewController添加到自己window上的那个视图)—>根视图控制器上的子视图    

12.请简述target和action的解耦?



13.instancetypeid 的区别?
     1.instancetype 在类型表示上,跟 id 一样,可以表示任何对象类型;
     2.instancetype 只能用在返回值类型上,不能像 id 一样用在参数类型上;
     3. instancetype id 多一个好处:编译器会检测 instancetype 的真实类型;
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值