美文网首页
数组(字典)中添加弱引用;NSPointerArray、NSHa

数组(字典)中添加弱引用;NSPointerArray、NSHa

作者: 没有故事的我 | 来源:发表于2018-04-14 09:12 被阅读0次

    我们知道,数组中添加一个对象,会使对象的引用计数加1,被数组所持有。
    如下是我们常用的使用,并打印对象引用计数。如果有需求在数组保持对象的弱引用,对象移除时,数组中也随之移除,那要怎么处理。
    本文介绍NSPointerArray、NSHashTable、NSMapTable实现对象的弱引用。

    这里写图片描述

    1、iOS6.0之前,可以用[NSValue valueWithNonretainedObject:person]获取到对象的value,将这个value添加到数组中。效果如下:

    这里写图片描述

    对于[NSValue valueWithNonretainedObject:NSObject];

    这里写图片描述

    官方介绍:这个方法是有用的,如果你想添加一个对象集合,但不想集合创建一个强引用。

    2、在iOS6.0之后出现了NSPointerArray。
    他的初始化方法,可以创建强引用,弱引用对象的数组

    + (NSPointerArray *)strongObjectsPointerArray NS_AVAILABLE(10_8, 6_0);
    + (NSPointerArray *)weakObjectsPointerArray NS_AVAILABLE(10_8, 6_0);
    
    这里写图片描述

    当对象被释放后,数组中同时会置为NULL;我们可以通过该API来操作数组。

    - (void)compact;   // eliminate NULLs
    
    // Getter: the number of elements in the array, including NULLs
    // Setter: sets desired number of elements, adding NULLs or removing items as necessary.
    @property NSUInteger count;
    
    @end
    
    @interface NSPointerArray (NSPointerArrayConveniences)  
    
    // construction
    #if (TARGET_OS_MAC && !(TARGET_OS_EMBEDDED || TARGET_OS_IPHONE))
    + (id) pointerArrayWithStrongObjects NS_DEPRECATED_MAC(10_5, 10_8); // strong objects
    + (id) pointerArrayWithWeakObjects NS_DEPRECATED_MAC(10_5, 10_8); // weak objects
    #endif
    
    + (NSPointerArray *)strongObjectsPointerArray NS_AVAILABLE(10_8, 6_0);
    + (NSPointerArray *)weakObjectsPointerArray NS_AVAILABLE(10_8, 6_0);
    
    @property (readonly, copy) NSArray *allObjects;
    

    3、同样,在iOS6.0之后,有NSHashTable类似于NSSet ,有NSMapTable为NSDictionary ,具体使用方法可以参考API。

    参考文章:
    https://blog.csdn.net/shaohua_lv/article/details/70257053

    相关文章

      网友评论

          本文标题:数组(字典)中添加弱引用;NSPointerArray、NSHa

          本文链接:https://www.haomeiwen.com/subject/vmvkkftx.html