MST
星途 面试题库

面试题:Objective-C中NSHashTable的常用创建方式及特点

请简述在Objective-C中NSHashTable常用的创建方式有哪些,并且说明每种创建方式所对应的NSHashTable实例在存储对象时的特点,比如对对象的引用方式等。
20.1万 热度难度
编程语言Objective-C

知识考点

AI 面试

面试题答案

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