面试题答案
一键面试- 创建不可变对象的弱引用哈希表:
- 创建方式:
[NSHashTable weakObjectsHashTable]
- 特点:对存储的对象使用弱引用。当存储的对象在其他地方被释放时,该对象在哈希表中会自动被移除,不会导致对象的循环引用。适用于对象生命周期不由哈希表控制,且不希望哈希表阻止对象被释放的场景。
- 创建方式:
- 创建可变对象的弱引用哈希表:
- 创建方式:
[NSHashTable weakObjectsMutableHashTable]
- 特点:同样对存储的对象使用弱引用。与不可变版本的区别在于,此哈希表是可变的,可以在运行时添加或移除对象,灵活性更高。
- 创建方式:
- 创建不可变对象的强引用哈希表:
- 创建方式:
[NSHashTable strongObjectsHashTable]
- 特点:对存储的对象使用强引用。这意味着只要对象在哈希表中,就不会被释放,会增加对象的引用计数。适用于希望哈希表控制对象生命周期,确保对象在哈希表使用期间不会被释放的场景。
- 创建方式:
- 创建可变对象的强引用哈希表:
- 创建方式:
[NSHashTable strongObjectsMutableHashTable]
- 特点:对存储对象进行强引用且哈希表可变。结合了强引用和可变性的特点,既可以保持对象的强引用以防止对象被释放,又能在运行时灵活地改变哈希表的内容。
- 创建方式:
- 创建不可变对象的非拥有引用哈希表:
- 创建方式:
[NSHashTable nonRetainingObjectsHashTable]
- 特点:对存储的对象使用非拥有引用,类似于弱引用,但非拥有引用不会自动将对象从哈希表中移除。即使对象在其他地方被释放,哈希表中仍保留该对象的“无效”引用,可能导致野指针问题,使用时需谨慎。
- 创建方式:
- 创建可变对象的非拥有引用哈希表:
- 创建方式:
[NSHashTable nonRetainingObjectsMutableHashTable]
- 特点:对存储对象采用非拥有引用且哈希表可变。同样存在对象被释放后哈希表中引用变为无效的风险,但可在运行时修改哈希表内容。
- 创建方式: