美文网首页
ios笔试的补充

ios笔试的补充

作者: cj2527 | 来源:发表于2016-07-08 11:00 被阅读28次

    1.GCD和NSOperation的工作原理
    GCD的工作原理是:让程序平行排队的特定任务,根据可用的处理资源,安排他们在任何可用的处理器核心上执行任务。一个任务可以是一个函数(function)或者是一个block。 GCD的底层依然是用线程实现,不过这样可以让程序员不用关注实现的细节。

    NSOperation的内部实现是基于GCD的,只不过多了一些实用的功能,更加面向对象。

    2、如何解决TableView卡的问题?
    2.1首先使用不透明度视图
    2.2不要创建不必要的cell,可以使用重用cell
    2.3减少视图的数目,可以用自定义cell
    2.4不要阻塞主线程,采用多线程

    3、单例的写法

    .h文件定义一个方法+(instancetype) shareInstance ;
    ,m文件定义全局变量static Singleton* _instance = nil;
    最后实现该方法
    +(instancetype) shareInstance
    {
        static dispatch_once_t onceToken ;
        dispatch_once(&onceToken, ^{
            _instance = [[self alloc] init] ;
        }) ;
        
        return _instance ;
    }
    

    4、block和代理的,通知的区别
    通知:一对多,很多控制器都需要知道一个事件,应该用通知;
    代理:一对一,需要建立联系。对同一个协议,一个对象只能设置一个代理delegate,所以单例对象就不能用代理;
    block:写法更简练,不需要写protocol、函数等等,注重结果的传输:比如对于一个事件,只想知道成功或者失败,并不需要知道进行了多少或者额外的一些信息

    5.block如何防止循环引用

    ARC下:使用__weak
    
    __weak typeof(self) weakSelf = self;
    [myBlock:^(){
    [weakSelf doSomething];
    }
    ]
    MRC下:使用__block
    __block typeof(self) weakSelf = self;
    [myBlock:^(){
    [weakSelf doSomething];
    }
    ]
    

    6.类别的作用
    a.可以将类的实现分散到多个不同类或者不同框架中
    b.创建私有方法的前向引用
    c.向对象添加非正式协议
    在不修改原有的类的基础上增加新的方法
    一个庞大的类可以分模块开发
    一个庞大的类可以由多个人来编写,更有利于团队合作

    7.类别和拓展的区别
    延展也叫拓展,是类的匿名类别,所谓拓展就是为类额外添加没有的方法、变量和合成属性。
    区别:
    只有拓展可以添加属性,而且拓展的方法是必须实现的。
    extensions被认为是一个私有的category

    8.正式协议和非正式协议?
    所谓的非正式协议就是类别,即凡是NSObject或其子类Foundation框架中的类增加的分类别,都是非正式协议。
    创建一个NSObject的类别称为“创建一个非正式协议”。因为,NSObject是顶级父类,在NSObject中添加了该方法,也就是说通过继承关系,所有的类中都有该方法。****
    正式协议是通过protocol指定的一些列方法的声明,然后由实现该协议的类自己去实现这些方法。而非正式协议是通过向NSObject中添加一个类别来实现,然后子类去继承NSObject。

    不过,非正式协议已经渐渐被正式协议取代,正式协议最大的优点就是可以使用泛型约束,而非正式协议则不可以。

    9.我们说的oc是动态运行时语言是什么意思?
    讲数据类型的确定,有编译时,推行到了运行时。例如一匹马,只有跑起来(运行起来)的时候,才能确定它是不是千里马。(确定它是什么类型,千里马的类型)

    10.什么是多态?
    不同对象以自己的方式响应相同消息的能力就叫多态。个人理解,多态,多种姿态,
    人和狗是不同对象,相同的消息说睡觉,人会睡在床上,狗却趴着地上。吃饭也一样,人和狗的姿态是不一样的.

    11.frame和bounds有什么不同?
    答案:frame指的是:该view在父view坐标系统中的位置和大小。(参照点是父亲的坐标系统)bounds指的是:该view在本身坐标系统中 的位置和大小。(参照点是本身坐标系统)

    相关文章

      网友评论

          本文标题:ios笔试的补充

          本文链接:https://www.haomeiwen.com/subject/ayaljttx.html