


















1、CADisplayLink、NSTimer会对target产生强引用,如果target又对它们产生强引用,那么会引起循环引用,那么有两种解决的方案分别是什么(使用block、使用代理对象NSProxy)?
2、NSTimer依赖于RunLoop,如果RunLoop的任务过于繁重,可能会导致NSTimer不准时,而GCD的定时器会更加准时,因为GCD是直接跟系统内核挂钩的,它不依赖于RunLoop,所以非常非常准时,并且不需要自己销毁,可将GCD定时器装成工具类来使用?
3、IOS程序的内存布局?
4、从64bit开始,iOS引入了Tagged Pointer技术,用于优化NSNumber、NSDate、NSString等小对象的存储 ?
5、OC的内存管理?
6、“深拷贝”和“浅拷贝”?
7、引用计数的存储?
在ARM64bit中,引用计数可以直接存储在优化过的isa指针中,也可能存储在SideTable类中,SideTable类中的成员变量refcnts是一个存放着对象引用计数的散列表。
8、weak指针的实现原理?
(1)runtime维护了一个存储所有weak的散列表weak_table_t,它存储在SideTable结构体里。
(2)weak_table_t是一个哈希表,其中key为所指向对象的指针,value为weak指针的地址数组。
(3)当一个对象被销毁时,会自动调用dealloc,此时会查看weak_table_t散列表,根据对象的地址取出weak清空,并将指向当前对象的弱指针置为nil,防止野指针产生。
网友评论