數(shù)組(字典)中添加弱引用;NSPointerArray、NSHashTable、NSMapTable

我們知道,數(shù)組中添加一個對象,會使對象的引用計數(shù)加1,被數(shù)組所持有。
如下是我們常用的使用,并打印對象引用計數(shù)。如果有需求在數(shù)組保持對象的弱引用,對象移除時,數(shù)組中也隨之移除,那要怎么處理。
本文介紹NSPointerArray、NSHashTable、NSMapTable實現(xiàn)對象的弱引用。

這里寫圖片描述

1、iOS6.0之前,可以用[NSValue valueWithNonretainedObject:person]獲取到對象的value,將這個value添加到數(shù)組中。效果如下:

這里寫圖片描述

對于[NSValue valueWithNonretainedObject:NSObject];

這里寫圖片描述

官方介紹:這個方法是有用的,如果你想添加一個對象集合,但不想集合創(chuàng)建一個強引用。

2、在iOS6.0之后出現(xiàn)了NSPointerArray。
他的初始化方法,可以創(chuàng)建強引用,弱引用對象的數(shù)組

+ (NSPointerArray *)strongObjectsPointerArray NS_AVAILABLE(10_8, 6_0);
+ (NSPointerArray *)weakObjectsPointerArray NS_AVAILABLE(10_8, 6_0);
這里寫圖片描述

當(dāng)對象被釋放后,數(shù)組中同時會置為NULL;我們可以通過該API來操作數(shù)組。

- (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

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

  • 前言 將一個對象添加到一個array或dictornary里一件很常見的事,一般不會遇到問題。但是如果這個容器會一...
    人仙兒a閱讀 1,450評論 2 5
  • 轉(zhuǎn)至元數(shù)據(jù)結(jié)尾創(chuàng)建: 董瀟偉,最新修改于: 十二月 23, 2016 轉(zhuǎn)至元數(shù)據(jù)起始第一章:isa和Class一....
    40c0490e5268閱讀 2,067評論 0 9
  • Spring Cloud為開發(fā)人員提供了快速構(gòu)建分布式系統(tǒng)中一些常見模式的工具(例如配置管理,服務(wù)發(fā)現(xiàn),斷路器,智...
    卡卡羅2017閱讀 136,569評論 19 139
  • 1,NSObject中description屬性的意義,它可以重寫嗎?答案:每當(dāng) NSLog(@"")函數(shù)中出現(xiàn) ...
    eightzg閱讀 4,340評論 2 19
  • 1.Project->Properties->Builders->New,新建一個Builder 2.參數(shù)配置 2...
    rrblm閱讀 246評論 0 0

友情鏈接更多精彩內(nèi)容