面试
文章平均质量分 52
miss_minor
坚持,请你坚持
展开
-
Masonry的实现原理
核心是基于NSLayoutConstraint自动布局来实现的NSLayoutConstraint如何进行约束布局?1、要实现自动布局,必须把该属性设置为NOview.translatesAutoresizingMaskIntoConstraints = NO2、然后使用 addConstraint添加约束[self.view addConstraint:[NSLayoutConstraint constraintWithItem:viewattribute:NSLayoutAttri原创 2020-07-07 09:27:09 · 1039 阅读 · 0 评论 -
block
在block内部如何修改block外部变量,为什么?使用__block.block不允许修改外部变量的值,这里所说的外部变量的值,指的是栈中指针的内存地址。block也是一种函数,但是block的执行并不一定发生定义的函数内,如果在block中操作的栈区的变量等于访问了野指针。__block所以起到的作用只是观察到该变量被block所持有,就将“外部变量“在栈中的内存地址放到堆中(就是拷贝一份放在堆中),进而block内部也可以修改外部变量的值。这时候block内部访问的值是这个“外部变量“在堆原创 2020-05-31 13:29:11 · 191 阅读 · 0 评论 -
iOS RunLoop
简介我们的应用可以在无人操作的时候休息,有事件的时候又立刻响应,因为有runloop的存在。runloop代表正在运行的循环,runloop是为线程而生,每个线程都有与之对应的runloop。主线程的runloop是默认启动的,由UIApplicationMain函数创建,对于其他线程来说,runloop默认是没有启动的。runloop内部实现runloop和mode的关系(图出自底下参考博客中,侵删)一个runloop 有多个mode 一个mode有若干个...原创 2020-05-31 13:02:28 · 195 阅读 · 0 评论 -
消息转发 _objc_msgForward
过程1、调用resolveInstanceMethod:方法(或resolveClassMethod:)允许用户在此时为该类动态添加实现。如果这个方法有实现,那么重新开始objc_msgSend流程(这个方法中可以调用class_addMethod进行动态方法添加)2、没有实现步骤一的动态添加方法的话,调用forwardingTargetForSelector:方法,尝试找到一个能响应该消息的对象,如果获取到,则直接把消息转发给它,否则执行步骤33、调用methodSignatureSelect原创 2020-05-31 11:53:28 · 243 阅读 · 0 评论 -
运行时相关
1、objc中向一个nil对象发送消息会发生什么?不起作用,但不会奔溃原因:objc是动态语言,每个方法在运行时会被动态转为消息发送,即objc_msgSend(receiver,selector)objc_class的源码定义// runtime.h(类在runtime中的定义)// http://weibo.com/luohanchenyilong/// https://github.com/ChenYilongstruct objc_class { Class is.原创 2020-05-24 12:45:19 · 123 阅读 · 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 · 249 阅读 · 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 · 250 阅读 · 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 · 464 阅读 · 0 评论 -
@property相关知识点
@property有哪些属性关键字?readonly 只读 assign 单纯赋值(非对象类型使用) unsafe_unretained 同assign一样 用于ARC retain 进行对象保持操作 strong 同retain 用于ARC weak 若引用 用于ARC copy 复制对象 (生成副本进行赋值,但只适用于遵...原创 2020-05-05 16:01:40 · 305 阅读 · 0 评论 -
iOS事件的传递和响应
整体流程:发生触摸事件后,系统把事件交给一个由UIApplicaition管理的事件队列中(FIFO);UIApplication会从事件队列中拿出最前面的事件,并将这个事件分发下去,先给keywindow;keywindow在视图层次结构中找到一个最适合的视图来处理触摸事件,找到合适的就调用视图控件的touches方法来进行具体的事件处理。事件的传递关键是为了找到合适的view进行处理触...原创 2020-05-05 15:40:15 · 122 阅读 · 0 评论