美文网首页
一次面试题总结2018-12-19

一次面试题总结2018-12-19

作者: 伪装C | 来源:发表于2018-12-20 16:11 被阅读0次

    1.nsstring使用strong还是copy?有什么区别

    当原字符是不可变字符时,使用strong和copy是一样的,都是指向同一内存地址,Copy只是做了次浅拷贝

    当原字符是可变字符时,使用copy则是深拷贝,产生了一个新的对象,而copy属性的对象指向这个新对象,并且copy的是NSString类型,不可变

    2.NSTimer准确吗,不准确还有什么方法实现

    NSTimer不准确,因为Timer添加到RunLoop上执行,而RunLoop需要执行的操作很多,如source timer observer,会导致时间的偏差

    我们可以使用GCD定时器dispatch_time,不会受RunLoop影响

    3.runtime如何解决数组越界问题

    OC动态语言特性,利用RunTime在运行时对NSArray类中objectAtIndex方法进行方法交换,在自己实现的方法中进行判断再调用系统方法

    4.GCD和NSOperation的区别

    GCD是基于c语言的底层API,NSOperation则是oc类,NSOperation是对GCD的封装

    GCD:结合block使用,代码简洁明了

    NSOperation:具有更多的函数可调用,可设置线程优先级,最大并发数,控制线程的取消,监听线程状态

    5.GCD如何控制线程的并发数量

    for循环创建线程中可以设置信号量dispatch_semaphore_t的个数dispatch_semaphore_create(10)(10就是你想要的并发线程数),超过最大线程数时dispatch_semaphore_wait等待,线程执行完成时dispatch_semaphore_signal来增加信号量

    6.KVC和KVO的区别

    KVC:key-value-coding 键值编码

    KVO:key-value-observer 键值监听 基于KVC的实现,只有当set值时才可以监听到值得改变

    7.你项目中什么地方用到了runtime

    系统类的方法扩展,属性关联,方法交换全局判断等

    8.SEL和IMP区别,在内存中如何关联映射

    SEL:存储方法的名字 并没有方法的实现

    IMP:则是存储着方法实现函数的地址

    二者关联:通过runtime中Dispatch_table指明二者联系,二者都存在objc_method*Method结构体中

    9.一个线程可以创建几个runloop,你项目中什么地方使用到runloop

    一个线程关联一个RunLoop,主线程默认开启RunLoop,其他线程需手动开启

    项目中使用RunLoop,NSTimer中会创建runloop, AFNetWorking2.0会创建常驻线程

    10.apple APNS原理

    首先要先像APNS服务器注册:

    1.Device连接APNs服务器并携带设备序列号

    2.连接成功,APNs经过打包和处理产生device_token并返回给注册的Device

    3.Device携带获取的device_token向我们自己的应用服务器注册

    4.完成需要被推送的Device在APNs服务器和我们自己的应用服务器注册

    推送过程如下:

    1.首先,安装了具有推送功能的应用,我们的设备在有网络的情况下会连接苹果推送服务器,连接过程中,APNS会验证device_token,连接成功后维持一个长连接;

    2.Provider(我们自己的服务器)收到需要被推送的消息并结合被推送设备的device_token一起打包发送给APNS服务器;

    3.APNS服务器将推送信息推送给指定device_token的设备;

    4.设备收到推送消息后通知我们的应用程序并显示和提示用户(声音、弹出框)

    11.YYModel实现原理

    runtime Coding

    YYModel source analyze

    12.delegate用什么修饰,用assign会出现什么问题

    delegate使用weak修饰,为了不产生循环引用,使用assign会导致野指针

    13.block会出现循环引用怎么解决,__strong何时使用

    block当互相持有时会产生循环引用,利用_ _weak来修饰block中引用的类,block中是延时执行时,可能被引用的类被释放,则会程序crash,这时需要在block中对引用的类进行_ _strong修饰强引用一下,等待block执行完毕后再释放

    14.ARC下会不会出现内存泄漏,什么情况会出现

    会出现,例如循环引用,死循环都会出现内存泄漏,自己malloc开辟的空间需要手动去free

    相关文章

      网友评论

          本文标题:一次面试题总结2018-12-19

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