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.如何删除单链表中一个节点?
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
关键字。