面试题
funny_soul_1024
这个作者很懒,什么都没留下…
展开
-
iOS面试题1
1. 一个NSObject对象占用多少内存?系统分配16个字节给NSObject对象(通过malloc_size函数获取)但是NSObject对象内部只使用了8个字节的存储空间(64bit环境下,通过class_getInstanceSize函数获取)@interface MJPerson : NSObject{ int _age; int _height; int...原创 2018-12-08 15:06:14 · 295 阅读 · 0 评论 -
iOS面试题4
11.Category能否添加成员变量?如果能添加,怎么操作?在Category中不能直接添加,但是可以间接添加. 通过关联对象来间接实现.// 在分类中导入runtime头文件#import <objc/runtime.h>static const void * _Nonnull MJNameKey = &MJNameKey;- (void)setName:(N...原创 2019-02-27 10:26:25 · 728 阅读 · 0 评论 -
RunLoop
1.讲讲RunLoop,项目中有用到吗?RunLoop 翻译过来是运行循环,指的是在程序运行过程中循环做一些事情.基本作用:保持程序的持续运行处理App中的各种事件节省CPU资源,提高程序性能(该做事时做事,该休息时休息)应用范畴有:定时器(NSTimer),PerformSelectorGCD Async Main Queue时间响应,手势识别,界面刷新网络请求Aut...原创 2019-03-06 09:45:24 · 228 阅读 · 0 评论 -
内存地址分配的面试题
下面的代码能编译执行吗?如果能执行的话,打印是什么?@interface MJPerson : NSObject@property (nonatomic, strong) NSString *name;- (void)test;@end@implementation MJPerson- (void)test{ NSLog(@"my name is %@",self.name...原创 2019-03-01 13:08:17 · 378 阅读 · 0 评论 -
super关键字,class
1.下面的代码的打印结果是什么@interface MJPerson : NSObject@end@implementation MJPerson@end@interface MJStudent : MJPerson@end@implementation MJStudent- (instancetype)init{ self = [super init]; ...原创 2019-02-28 16:21:02 · 127 阅读 · 0 评论 -
objc_msgSend执行流程
objc_msgSend执行流程OC中方法调用,其实都是转换成objc_msgSend函数调用objc_msgSend的执行流程可以分为3个阶段消息发送动态方法解析消息转发1.消息发送上图就是消息发送阶段的过程,如果查找到最顶级的类,仍然没有找到相应的方法,则会进入下一个阶段2. 动态方法解析我们在这一步中动态添加的方法,是添加到当前类/当前元类 的class_rw_t表...原创 2019-02-28 15:05:32 · 312 阅读 · 0 评论 -
面试题_block
1 block 的原理是身边? 本质是什么?block 本质上也是一个 OC 对象,它内部也有个 isa 指针,block 是封装了函数调用以及函数调用环境的 OC 对象底层原理图为2.__block修饰符有什么作用? 使用时候有什么注意点?__block可以解决block内部无法修改auto变量值的问题__block不能修饰全局变量和静态变量(static)编译器会将__block...原创 2019-02-22 15:21:15 · 145 阅读 · 0 评论 -
iOS面试题3
7. Category的实现原理Category编译之后的底层结构是struct Category_t,里面存储着分类的属性,实例方法,类方法,协议信息在程序运行的时候,runtime会将Category的数据,合并到类信息中Category的底层实现8.Category和Extension的区别是什么?Extension 在程序编译的时候,它的数据就已经包含在类信息中了C...原创 2018-12-08 19:32:02 · 121 阅读 · 0 评论 -
iOS面试题2
4.iOS用什么方式实现对一个对象的KVO?利用RuntimeAPI动态生成一个新子类,并且让instance对象的isa指向这个全新的子类当修改instance对象的属性时,会调用新子类的set方法,set方法内部实现的伪代码 willChangeValueForKey: 父类原来的setter didChangeValueForKey: 内部会触发监听器(Ob...原创 2018-12-08 16:25:39 · 126 阅读 · 0 评论 -
有关内存的面试题
1. 使用CADisplayLink NSTimer有什么注意点?1.CADisplayLink NSTimer 会对target产生强引用,如果target又对他们产生强引用,那么将会发生循环引用.解决办法: 在CADisplayLink NSTimer 和 控制器之间设置一层代理, VC强引用CADisplayLink NSTimer, target设置给代理,代理中弱引用vc@in...原创 2019-05-16 09:35:28 · 268 阅读 · 0 评论