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
AI 代码解读
// // 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
AI 代码解读
3. 细节