亚洲乱码中文字幕综合,中国熟女仑乱hd,亚洲精品乱拍国产一区二区三区,一本大道卡一卡二卡三乱码全集资源,又粗又黄又硬又爽的免费视频

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

 更新時間:2017年09月12日 10:48:19   作者:暮光  
這篇文章主要給大家介紹了關于在iOS中的集合該如何弱引用對象的相關資料,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來依稀學習學習吧。

前言

本文主要給大家介紹了關于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 各有不同的策略,所以有四種組合:

key object
weak weak
strong weak
weak strong
strong strong

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

NSHashTable

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

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

新建一個 WeakRef 類:

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

使用:

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

4. 根據(jù) 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實現(xiàn)簡易鐘表

    iOS實現(xiàn)簡易鐘表

    這篇文章主要為大家詳細介紹了iOS實現(xiàn)簡易鐘表,文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2020-02-02
  • iOS13適配的實現(xiàn)方法

    iOS13適配的實現(xiàn)方法

    這篇文章主要介紹了iOS13適配的實現(xiàn)方法,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2019-09-09
  • iOS實現(xiàn)動態(tài)元素的引導圖效果

    iOS實現(xiàn)動態(tài)元素的引導圖效果

    這篇文章給大家介紹了iOS實現(xiàn)動態(tài)元素的引導圖效果的步驟,文章給出了示例代碼介紹的很詳細,有需要的朋友們可以參考借鑒,下面來一起看看吧。
    2016-09-09
  • iOS開發(fā)技能weak和strong修飾符的規(guī)范使用詳解

    iOS開發(fā)技能weak和strong修飾符的規(guī)范使用詳解

    這篇文章主要為大家介紹了iOS開發(fā)技能weak和strong修飾符的規(guī)范使用詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪
    2022-07-07
  • iOS實現(xiàn)知乎和途家導航欄漸變的文字動畫效果

    iOS實現(xiàn)知乎和途家導航欄漸變的文字動畫效果

    這篇文章給大家分享了利用iOS實現(xiàn)知乎和途家導航欄漸變的文字動畫效果,有需要的朋友們可以參考借鑒。下面來一起看看。
    2016-09-09
  • iOS開發(fā)之路--微博骨架搭建

    iOS開發(fā)之路--微博骨架搭建

    本文是IOS開發(fā)之路的第四篇,主要講訴如何一步步搭建起微博的骨架,并附上源碼,希望對大家的IOS開發(fā)能提供些借鑒
    2014-08-08
  • iOS如何獲取當前View所在控制器的方法

    iOS如何獲取當前View所在控制器的方法

    在開發(fā)iOS的時候經(jīng)常需要獲取當前View所在的控制器,下面小編給大家分享個方法,文章給出了示例代碼,對大家的學習和理解很有幫助,下面來一起看看吧。
    2016-09-09
  • React Native學習教程之自定義NavigationBar詳解

    React Native學習教程之自定義NavigationBar詳解

    這篇文章主要給大家介紹了關于React Native學習教程之自定義NavigationBar的相關資料,文中通過是示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧。
    2017-10-10
  • iOS開發(fā)之統(tǒng)計Xcode工程的代碼行數(shù)

    iOS開發(fā)之統(tǒng)計Xcode工程的代碼行數(shù)

    這篇文章主要給大家介紹了在iOS開發(fā)中,如果想要統(tǒng)計Xcode工程的代碼行數(shù)該如何實現(xiàn),文章給出了詳細的方法和示例代碼,對大家的理解和學習很有幫助,本文中還分享了統(tǒng)計java文件和xml文件的代碼,有需要的朋友們下面來一起看看吧。
    2016-10-10
  • IOS 出現(xiàn)問題POST網(wǎng)絡請求狀態(tài)code:500的解決方法

    IOS 出現(xiàn)問題POST網(wǎng)絡請求狀態(tài)code:500的解決方法

    這篇文章主要介紹了IOS 出現(xiàn)問題POST網(wǎng)絡請求狀態(tài)code:500的解決方法的相關資料,需要的朋友可以參考下
    2017-02-02

最新評論