大厂常问iOS面试题--内存管理篇

1.什么情况使用weak关键字,相比assign有什么不同?

  • 什么情况使用 weak 关键字?

    在 ARC 中,在有可能出现循环引用的时候,往往要通过让其中一端使用 weak 来解决,比如: delegate 代理属性

    自身已经对它进行一次强引用,没有必要再强引用一次,此时也会使用 weak,自定义 IBOutlet 控件属性一般也使用 weak;当然,也可以使用strong。在下文也有论述:《IBOutlet连出来的视图属性为什么可以被设置成weak?》

  • 不同点:

    weak 此特质表明该属性定义了一种“非拥有关系” (nonowning relationship)。为这种属性设置新值时,设置方法既不保留新值,也不释放旧值。此特质同assign类似, 然而在属性所指的对象遭到摧毁时,属性值也会清空(nil out)。 而 assign 的“设置方法”只会执行针对“纯量类型” (scalar type,例如 CGFloat 或 NSlnteger 等)的简单赋值操作。

    assign 可以用非 OC 对象,而 weak 必须用于 OC 对象


阅读更多

大厂常问iOS面试题--Runtime篇

1.什么是Runtime

在 Objective-C 中,Runtime 是一套 C 语言的 API,用于在运行时操作对象、类和元类。通过 Objective-C Runtime,开发者可以在程序运行时动态地创建类、修改类的方法、获取类的属性信息、发送消息等。这使得 Objective-C 具有了诸多动态语言的特性,如动态绑定、消息转发、方法调用等。


阅读更多

大厂常问iOS面试题--Runloop篇

1.Runloop 和线程的关系?

  • 一个线程对应一个 Runloop。

  • 主线程的默认就有了 Runloop。

  • 子线程的 Runloop 以懒加载的形式创建。

  • Runloop 存储在一个全局的可变字典里,线程是 key ,Runloop 是 value。


阅读更多