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实现原理
12.delegate用什么修饰,用assign会出现什么问题
delegate使用weak修饰,为了不产生循环引用,使用assign会导致野指针
13.block会出现循环引用怎么解决,__strong何时使用
block当互相持有时会产生循环引用,利用_ _weak来修饰block中引用的类,block中是延时执行时,可能被引用的类被释放,则会程序crash,这时需要在block中对引用的类进行_ _strong修饰强引用一下,等待block执行完毕后再释放
14.ARC下会不会出现内存泄漏,什么情况会出现
会出现,例如循环引用,死循环都会出现内存泄漏,自己malloc开辟的空间需要手动去free
网友评论