面试
文章平均质量分 52
miss_minor
坚持,请你坚持
展开
-
Masonry的实现原理
核心 是基于NSLayoutConstraint自动布局来实现的 NSLayoutConstraint如何进行约束布局? 1、要实现自动布局,必须把该属性设置为NO view.translatesAutoresizingMaskIntoConstraints = NO 2、然后使用 addConstraint添加约束 [self.view addConstraint: [NSLayoutConstraint constraintWithItem:view attribute:NSLayoutAttri原创 2020-07-07 09:27:09 · 1062 阅读 · 0 评论 -
block
在block内部如何修改block外部变量,为什么? 使用__block. block不允许修改外部变量的值,这里所说的外部变量的值,指的是栈中指针的内存地址。block也是一种函数,但是block的执行并不一定发生定义的函数内,如果在block中操作的栈区的变量等于访问了野指针。 __block所以起到的作用只是观察到该变量被block所持有,就将“外部变量“在栈中的内存地址放到堆中(就是拷贝一份放在堆中),进而block内部也可以修改外部变量的值。这时候block内部访问的值是这个“外部变量“在堆原创 2020-05-31 13:29:11 · 211 阅读 · 0 评论 -
iOS RunLoop
简介 我们的应用可以在无人操作的时候休息,有事件的时候又立刻响应,因为有runloop的存在。 runloop代表正在运行的循环,runloop是为线程而生,每个线程都有与之对应的runloop。 主线程的runloop是默认启动的,由UIApplicationMain函数创建,对于其他线程来说,runloop默认是没有启动的。 runloop内部实现 runloop和mode的关系 (图出自底下参考博客中,侵删) 一个runloop 有多个mode 一个mode有若干个...原创 2020-05-31 13:02:28 · 212 阅读 · 0 评论 -
消息转发 _objc_msgForward
过程 1、调用resolveInstanceMethod:方法(或resolveClassMethod:)允许用户在此时为该类动态添加实现。如果这个方法有实现,那么重新开始objc_msgSend流程(这个方法中可以调用class_addMethod进行动态方法添加) 2、没有实现步骤一的动态添加方法的话,调用forwardingTargetForSelector:方法,尝试找到一个能响应该消息的对象,如果获取到,则直接把消息转发给它,否则执行步骤3 3、调用methodSignatureSelect原创 2020-05-31 11:53:28 · 265 阅读 · 0 评论 -
运行时相关
1、objc中向一个nil对象发送消息会发生什么? 不起作用,但不会奔溃 原因:objc是动态语言,每个方法在运行时会被动态转为消息发送,即objc_msgSend(receiver,selector) objc_class的源码定义 // runtime.h(类在runtime中的定义) // http://weibo.com/luohanchenyilong/ // https://github.com/ChenYilong struct objc_class { Class is.原创 2020-05-24 12:45:19 · 138 阅读 · 0 评论 -
protocol 和category如何使用property?
protocol 在protocol中使用property,只会生成setter和getter方法的声明。 当使用的时候 使用systhsize name; 自动生成getter、setter 或者手动自己添加getter、setter和实例变量 category 和protocol不同的是,在category的时候已经不允许在类中在加入实例变量。(编译的时候,对象的内容布局已经确定)需要借助函数objc_setAssociatedObject 和 objc_getAssociatedObject原创 2020-05-24 11:53:01 · 268 阅读 · 0 评论 -
Copy相关
怎么用copy关键字? 1、NSString、NSArray,NSDictionary等经常使用copy关键字,是因为它们有可变类型 2、block也经常使用,因为在MRC中,方法内部的block是在栈区的,使用copy可以把它放在堆区,在ARC中写不写都行,对block使用strong和copy都是一样的,但是使用copy更好。 深拷贝和浅拷贝 浅拷贝就是拷贝指针,深拷贝是拷贝内容 集合的浅拷贝 进行浅拷贝,会向原始的集合发送retain消息,引用计数+1,所以copy后的指针...原创 2020-05-24 11:57:50 · 270 阅读 · 0 评论 -
iOS Runtime实现weak属性
weak的特点: 同assign一样,是一种非持有关系,不同在于当属性所指对象被释放后,属性值也会自动清空。 如何实现? 当你初始化一个weak变量的时候,runtime会调用objc_initweak(id * object, id value) id __weak obj1 = obj; objc_initWeak(&obj1, obj); objc_initweak-> objc_storeWeak(object, value) 首先通过value去找它对应的弱引用表原创 2020-05-17 11:03:08 · 483 阅读 · 0 评论 -
@property相关知识点
@property有哪些属性关键字? readonly 只读 assign 单纯赋值(非对象类型使用) unsafe_unretained 同assign一样 用于ARC retain 进行对象保持操作 strong 同retain 用于ARC weak 若引用 用于ARC copy 复制对象 (生成副本进行赋值,但只适用于遵...原创 2020-05-05 16:01:40 · 324 阅读 · 0 评论 -
iOS事件的传递和响应
整体流程: 发生触摸事件后,系统把事件交给一个由UIApplicaition管理的事件队列中(FIFO);UIApplication会从事件队列中拿出最前面的事件,并将这个事件分发下去,先给keywindow;keywindow在视图层次结构中找到一个最适合的视图来处理触摸事件,找到合适的就调用视图控件的touches方法来进行具体的事件处理。 事件的传递关键是为了找到合适的view进行处理触...原创 2020-05-05 15:40:15 · 144 阅读 · 0 评论