Skip to content

Latest commit

 

History

History
44 lines (28 loc) · 1.65 KB

题.md

File metadata and controls

44 lines (28 loc) · 1.65 KB

前言

为了能快速突破面试门槛,各种开发的公众号、github上的知名题型,各种各样的面试题文章很受广大程序员欢迎。但是在面对各种鱼龙混杂的题目时,不要盲目相信,实事求是,追求原理,在这个过程中提升自己更为重要。

1.寻找最近公共 View

其实就是两个链表找最近交点的问题。

  1. 两个for循环遍历两个链表。
  2. 一个for循环+NSSet的containsObject方法。(NSSet表是hash表,查找元素时间复杂度是O(1))
  3. 两个指针从根节点开始寻找第一个不同节点的上一个节点。
  4. UIView 的 isDescendant 方法递归。

2. Block

__weak typeof(self) weakSelf = self;
[self doSomeBlockJob:^{
    __strong typeof(weakSelf) strongSelf = weakSelf;
    if (strongSelf) {
        ...
    }
}];

2.1 什么时候在 block 里面用 self,不需要使用 weak self?

2.2 为什么 block 里面还需要写一个 strong self,如果不写会怎么样?

2.3 有没有这样一个需求场景,block 会产生循环引用,但是业务又需要你不能使用 weak self? 如果有,请举一个例子并且解释这种情况下如何解决循环引用问题。

3. weak 变量在引用计数为0时,会被自动设置成 nil,这个特性是如何实现的?

4. NSTimer 使用不当会导致 target 不能释放。

参考