面试总结

39 阅读4分钟

1. OC的对象是什么类型,以及它在内存空间里占的大小是多少

2. Fluuter的渲染机制、或渲染原理

3. Objective-C 每一个实例对象都有自己的类对象吗

不是的,每一个实例对象不都有自己的类对象。在Objective-C中,每个类的实例(对象)确实都有一个isa指针,它指向该对象的类,但类对象并不是实例对象的独立副本。类对象是针对类的元类的一个实例,它描述了类的属性和方法,而实例对象是由类对象创建的,共享类对象的isa指针,指向同一个类。因此,所有同一个类的实例对象共享相同的类对象。

4. APP启动流程,以及启动优化

5. APP包体积优化

5. 怎么处理多线程编程出现的资源抢占问题

1.加锁 2.自旋锁和互斥锁,有什么区别,怎么选择

6. Swift的 struct是值类型,在赋值,以及参数传递的时候是如何保证性能的

  • 对于 Int、Double、Boolean、String 等基本类型的值类型,它们在赋值的时候就会发生拷贝,它们没有 Copy-on-Write 这一特性(因为Copy-on-Write带来的开销往往比直接复制的开销要大)。
  • 对于 Array、Dictionary、Set类型,当它们赋值的时候不会发生拷贝,只有在修改的之后才会发生拷贝,即 Copy-on-Write。
  • 对于自定义的数据类型不会自动实现COW,可按需实现。
  • medium.com/@lucianoalm…

7. NSString,NSArray 的深拷贝、浅拷贝

NSString、NSArray分别调用copy、mutableCopy;NSMutableString、NSMutableArray分别调用copy、mutableCopy

  • copy出来的字符串一定是不可变字符串。如果传入的是可变字符串,会发生深拷贝为不可变字符串,否则为浅拷贝。
  • mutablecopy,一定是深拷贝,拷贝出来的一定是可变字符串或者数组。即使传入的是不可变字符串或者数组。

8. OC的strong, weak, assign, copy区别

  • strong表示指向并拥有该对象。其修饰的对象引用计数会增加1。该对象只要引用计数不为0则不会被销毁。当然强行将其设为nil可以销毁它。

  • weak表示指向但不拥有该对象。其修饰的对象引用计数不会增加。无需手动设置,该对象会自行在内存中销毁。

  • assign主要用于修饰基本数据类型,如NSInteger和CGFloat,这些数值主要存在于栈上。

  • weak 一般用来修饰对象,assign一般用来修饰基本数据类型。原因是assign修饰的对象被释放后,指针的地址依然存在,造成野指针,在堆上容易造成崩溃。而栈上的内存系统会自动处理,不会造成野指针。

  • copy与strong类似。不同之处是strong的复制是多个指针指向同一个地址,而copy的复制每次会在内存中拷贝一份对象,指针指向不同地址。copy一般用在修饰有可变对应类型的不可变对象上,如NSString, NSArray, NSDictionary。

9.如何删除单链表中一个节点?

20250212-125136.jpeg

func deleteNode(_ node: ListNode) {  
    guard let nextNode = node.next else {  
        return // 如果节点是最后一个节点,直接返回不做处理  
    }  
    node.val = nextNode.val // 将下一个节点的值赋给当前节点  
    node.next = nextNode.next // 将下一个节点的next指向下下个节点(等于现在是下一个节点)  
}

10. Swift中 struct 和class有什么区别

  • 值类型 vs 引用类型。 struct 是值类型,当它们被赋值或传递给函数或方法时,会复制它们的内容。class 是引用类型,只会复制引用,引用指向同一个实例。
  • 继承。class 支持继承,可以从其他类继承属性和方法。struct 不支持继承。
  • 可变性不同。在 class 中,声明方法修改属性时不需要 mutating 关键字。在 struct 中,声明方法修改属性时需要 mutating 关键字。

11. SDWebImage高并发请求同一张图片URL

12. Swift里面的消息派发机制

13. Swift协议 利用extension 提供的默认实现,属于哪一种机制

14. 为什么会发生离屏渲染,以及离屏渲染发生的整个过程

15. ScrollView 触摸滑动事件对应Runloop的哪种Model

16. Swift的方法和属性名保存在哪里