亚洲激情专区-91九色丨porny丨老师-久久久久久久女国产乱让韩-国产精品午夜小视频观看

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

iOS中的集合該怎么弱引用對象

發布時間:2021-02-20 13:50:24 來源:億速云 閱讀:243 作者:小新 欄目:移動開發

這篇文章給大家分享的是有關iOS中的集合該怎么弱引用對象的內容。小編覺得挺實用的,因此分享給大家做個參考,一起跟隨小編過來看看吧。

1. 使用 NSValue

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

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

2. 使用 NSPointerArray,NSMapTable,NSHashTable

以上三個類型的用法分別對應 NSMutableArray,NSMutableDictionary,NSMutableSet。

NSPointerArray

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

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

NSPointerFunctionsOptions 枚舉定義著內存管理策略、方法特性和內存標識,以下是幾個常用的枚舉值:

內存管理策略:

  • NSPointerFunctionsStrongMemory:強引用成員

  • NSPointerFunctionsMallocMemory 與 NSPointerFunctionsMachVirtualMemory: 用于 Mach 的 虛擬內存管理

  • NSPointerFunctionsWeakMemory:弱引用成員

方法特性:

  • NSPointerFunctionsObjectPersonality:hash、isEqual、對象描述

  • NSPointerFunctionsOpaquePersonality:pointer 的 hash 、直接判等

內存標識:

  1. NSPointerFunctionsCopyIn 添加成員時進行 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 各有不同的策略,所以有四種組合:

keyobject
weakweak
strongweak
weakstrong
strongstrong

如果 key 或者 object 是 weak 修飾時,任意一方在內存中被釋放都會移除該鍵值對。

NSHashTable

NSHashTable 使用方法類似于 NSMutableSet,只不過該類型的 allObjectes 屬性返回的是一個 NSArray,會對成員強引用。

3. 根據 NSValue 的思路自己寫一個類

新建一個 WeakRef 類:

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

使用:

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

4. 根據 NSValue 的思路自己寫一個 block

聲明和定義一個 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])];

感謝各位的閱讀!關于“iOS中的集合該怎么弱引用對象”這篇文章就分享到這里了,希望以上內容可以對大家有一定的幫助,讓大家可以學到更多知識,如果覺得文章不錯,可以把它分享出去讓更多的人看到吧!

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

ios
AI

嘉定区| 荥阳市| 保亭| 南丹县| 景泰县| 六安市| 炎陵县| 合肥市| 丰原市| 揭西县| 彰武县| 万盛区| 抚宁县| 桃江县| 云安县| 葫芦岛市| 凤翔县| 铜鼓县| 岳池县| 图木舒克市| 三河市| 永康市| 湖南省| 旺苍县| 镇巴县| 望都县| 柞水县| 礼泉县| 叙永县| 垫江县| 高安市| 达拉特旗| 石林| 洛扎县| 金阳县| 黄浦区| 正蓝旗| 东莞市| 时尚| 炎陵县| 永宁县|