国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 系統(tǒng) > iOS > 正文

iOS中的集合該如何弱引用對(duì)象示例詳解

2020-07-26 02:42:02
字體:
供稿:網(wǎng)友

前言

本文主要給大家介紹了關(guān)于iOS集合弱引用對(duì)象的相關(guān)內(nèi)容,分享出來供大家參考學(xué)習(xí),下面話不多說了,來一起看看詳細(xì)的介紹吧。

1. 使用 NSValue

NSValue 可以弱引用保存一個(gè)對(duì)象,我們可以使用這種方法間接的引用。

NSValue *value = [NSValue valueWithNonretainedObject:@selector(class)];[array addObject:value];

2. 使用 NSPointerArray,NSMapTable,NSHashTable

以上三個(gè)類型的用法分別對(duì)應(yīng) NSMutableArray,NSMutableDictionary,NSMutableSet。

NSPointerArray

NSPointerArray 和 NSMutableArray 一樣同是有序可變集合,可插入、刪除成員; 不同的是可以存儲(chǔ) NULL,且 count 可變,用 NULL 來填充。

// 實(shí)例化方法- (instancetype)initWithOptions:(NSPointerFunctionsOptions)options;- (instancetype)initWithPointerFunctions:(NSPointerFunctions *)functions;

NSPointerFunctionsOptions 枚舉定義著內(nèi)存管理策略、方法特性和內(nèi)存標(biāo)識(shí),以下是幾個(gè)常用的枚舉值:

內(nèi)存管理策略:

  • NSPointerFunctionsStrongMemory:強(qiáng)引用成員
  • NSPointerFunctionsMallocMemory 與 NSPointerFunctionsMachVirtualMemory: 用于 Mach 的 虛擬內(nèi)存管理
  • NSPointerFunctionsWeakMemory:弱引用成員

方法特性:

  • NSPointerFunctionsObjectPersonality:hash、isEqual、對(duì)象描述
  • NSPointerFunctionsOpaquePersonality:pointer 的 hash 、直接判等

內(nèi)存標(biāo)識(shí):

  1. NSPointerFunctionsCopyIn 添加成員時(shí)進(jìn)行 copy 操作

選用多種組合方式:

NSPointerFunctionsOptions options = NSPointerFunctionsStrongMemory | NSPointerFunctionsObjectPersonality | NSPointerFunctionsCopyIn;NSHashTable *table = [NSHashTable hashTableWithOptions:options];
static BOOL IsEqual(const void *item1, const void *item2, NSUInteger (*size)(const void *item)) {  return *(const int *)item1 == *(const int *)item2;}NSPointerFunctions *functions = [[NSPointerFunctions alloc] init];[functions setIsEqualFunction:IsEqual];

NSMapTable

NSMapTable 和 NSPointerArray 的初始化方法和使用都類似,不同的是 NSMapTable 的 key 和 object 各有不同的策略,所以有四種組合:

key object
weak weak
strong weak
weak strong
strong strong

如果 key 或者 object 是 weak 修飾時(shí),任意一方在內(nèi)存中被釋放都會(huì)移除該鍵值對(duì)。

NSHashTable

NSHashTable 使用方法類似于 NSMutableSet,只不過該類型的 allObjectes 屬性返回的是一個(gè) NSArray,會(huì)對(duì)成員強(qiáng)引用。

3. 根據(jù) NSValue 的思路自己寫一個(gè)類

新建一個(gè) WeakRef 類:

@interface WeakRef : NSObject@property (nonatomic, weak) id ref;@end

使用:

WeakRef *weakRef = [WeakRef new];weakRef.ref = xxx;[array addObject:weakRef];

4. 根據(jù) NSValue 的思路自己寫一個(gè) block

聲明和定義一個(gè) block:

typedef id(^WeakRefBlock)();typedef id(^MakeWeakRefBlock)(id);MakeWeakRefBlock makeWeakRef (id object) {  __weak id weakref = object;   WeakRefBlock block = ^(){    return weakref;  };  return block;}

使用:

[array addObject:makeWeakRef([NSObject new])];

總結(jié)

以上就是這篇文章的全部內(nèi)容了,希望本文的內(nèi)容對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,如果有疑問大家可以留言交流,謝謝大家對(duì)武林網(wǎng)的支持。

發(fā)表評(píng)論 共有條評(píng)論
用戶名: 密碼:
驗(yàn)證碼: 匿名發(fā)表
主站蜘蛛池模板: 翁牛特旗| 荣昌县| 安岳县| 平和县| 西安市| 成安县| 岳池县| 阳信县| 定兴县| 成都市| 青铜峡市| 泉州市| 泰来县| 昆明市| 白朗县| 汕头市| 化州市| 常州市| 台中市| 乌兰县| 开封市| 当雄县| 漳州市| 库尔勒市| 子洲县| 蒙城县| 永胜县| 九江县| 宁晋县| 汪清县| 治县。| 麟游县| 潮州市| 竹溪县| 揭阳市| 香港| 抚远县| 西贡区| 梅河口市| 静乐县| 拉萨市|