欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

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

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

前言

本文主要給大家介紹了關(guān)于iOS集合弱引用對(duì)象的相關(guān)內(nèi)容,分享出來(lái)供大家參考學(xué)習(xí),下面話不多說(shuō)了,來(lái)一起看看詳細(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 來(lái)填充。

// 實(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,只不過(guò)該類型的 allObjectes 屬性返回的是一個(gè) NSArray,會(huì)對(duì)成員強(qiáng)引用。

3. 根據(jù) NSValue 的思路自己寫(xiě)一個(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 的思路自己寫(xiě)一個(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é)

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

相關(guān)文章

  • iOS實(shí)現(xiàn)簡(jiǎn)易鐘表

    iOS實(shí)現(xiàn)簡(jiǎn)易鐘表

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

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

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

    iOS實(shí)現(xiàn)動(dòng)態(tài)元素的引導(dǎo)圖效果

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

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

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

    iOS實(shí)現(xiàn)知乎和途家導(dǎo)航欄漸變的文字動(dòng)畫(huà)效果

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

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

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

    iOS如何獲取當(dāng)前View所在控制器的方法

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

    React Native學(xué)習(xí)教程之自定義NavigationBar詳解

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

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

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

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

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

最新評(píng)論