NSPointerArray的用处

简介:

NSPointerArray的用处

 

1. 说明

也许你对NSArray使用了如指掌,每个加入到NSArry的对象都会被NSArray持有.有时候,这种特性不是我们想要的结果.

有时候,我们想将对象存储起来,但是不想让数组增加了这个对象的引用计数,这个时候,NSPointArray才是你想要的.

 

2. 源码

https://github.com/YouXianMing/NSPointerArrayExample



//
//  WeakMutableArray.h
//  NSPointerArray
//
//  Created by YouXianMing on 15/6/5.
//  Copyright (c) 2015年 YouXianMing. All rights reserved.
//

#import <Foundation/Foundation.h>

@interface WeakMutableArray : NSObject

/**
 *  获取所有有效的对象
 */
@property (nonatomic, strong, readonly)  NSArray    *allObjects;

/**
 *  数组中有用对象的个数
 */
@property (nonatomic, readonly)          NSInteger   usableCount;

/**
 *  数组中所有对象的个数(包括NULL)
 */
@property (nonatomic, readonly)          NSInteger   allCount;

/**
 *  添加对象
 *
 *  @param object 被添加对象
 */
- (void)addObject:(id)object;

/**
 *  获取数组中的对象(可以获取到NULL对象)
 *
 *  @param index 数组下标
 *
 *  @return 对象
 */
- (id)objectAtWeakMutableArrayIndex:(NSUInteger)index;

@end


//
//  WeakMutableArray.m
//  NSPointerArray
//
//  Created by YouXianMing on 15/6/5.
//  Copyright (c) 2015年 YouXianMing. All rights reserved.
//

#import "WeakMutableArray.h"

@interface WeakMutableArray ()

@property (nonatomic, strong) NSPointerArray  *pointerArray;

@end

@implementation WeakMutableArray

- (instancetype)init {
    
    self = [super init];
    if (self) {
        [self setup];
    }
    return self;
}

- (void)setup {
    self.pointerArray = [NSPointerArray weakObjectsPointerArray];
}

- (void)addObject:(id)object {
    [self.pointerArray addPointer:(__bridge void *)(object)];
}

- (id)objectAtWeakMutableArrayIndex:(NSUInteger)index {
    return [self.pointerArray pointerAtIndex:index];
}

#pragma mark - 重写getter方法
@synthesize allObjects = _allObjects;
- (NSArray *)allObjects {
    return self.pointerArray.allObjects;
}

@synthesize usableCount = _usableCount;
- (NSInteger)usableCount {
    return self.pointerArray.allObjects.count;
}

@synthesize allCount = _allCount;
- (NSInteger)allCount {
    return self.pointerArray.count;
}

@end

3. 细节


目录
相关文章
|
1天前
|
算法
‘/’ 和 ‘%’ 在编程中的作用【附加练习题】
‘/’ 和 ‘%’ 在编程中的作用【附加练习题】
程序人生 - 燕窝等级分几 A 是什么意思?有什么差别?5A燕窝最好吗?
程序人生 - 燕窝等级分几 A 是什么意思?有什么差别?5A燕窝最好吗?
264 0
程序人生 - 燕窝等级分几 A 是什么意思?有什么差别?5A燕窝最好吗?
|
1天前
|
自然语言处理 关系型数据库 MySQL
一文明白MySQL索引的用法及好处
一文明白MySQL索引的用法及好处
19 0
|
1天前
|
C++ 容器
【C++11特性篇】一文带小白轻松理解【万能引用(引用折叠)】&【完美转发】
【C++11特性篇】一文带小白轻松理解【万能引用(引用折叠)】&【完美转发】
|
8月前
|
PHP 开发者
|
11月前
|
算法
GSEA会用了,来了解下DGSEA?
差异基因集富集分析(DGSEA)是对Broad Institute / MIT的原始的Gene Set Enrichment Aanlysis(GSEA)分析算法的改进。它是一种用来确定输入基因集在两种生物通路之间是否显示出统计学上差异计算方法。
106 0
|
12月前
|
NoSQL Java 数据库
解释afterPropertiesSet方法的用处
解释afterPropertiesSet方法的用处
千万别再一直无脑使用ES6的箭头函数了,它虽然很有用但并不是万能的
相信很多小伙伴自从知道了ES6的箭头函数以后,都疯狂得使用,渐渐的淡忘了普通函数的使用。不过确实,箭头函数看起来比较简洁,用起来也舒服,不过它的出现是为了解决某一部分问题的,并不是用来替代普通函数的,所以我们不能在每一个地方都使用箭头函数
122 0
千万别再一直无脑使用ES6的箭头函数了,它虽然很有用但并不是万能的
|
设计模式 缓存 前端开发
可否举例说明你在工作中是如何优化前端代码的?
可否举例说明你在工作中是如何优化前端代码的?
159 0
|
设计模式 Java 程序员
细微之处见真章之字符串超长省略功能
细微之处见真章之字符串超长省略功能
185 0