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
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. 细节


目录
打赏
0
0
0
0
49
分享
相关文章
Devchat究竟好用在那些地方呢?
Devchat究竟好用在那些地方呢?
91 0
别再被绕晕了!5分钟读懂成员变量和局部变量的所有区别!
本文以小明的面试经历为例,详细解析了Java中成员变量与局部变量的区别,包括定义位置、生命周期、默认值、修饰符支持、存储位置及多线程环境下的表现,帮助读者更好地理解和应对面试中的相关问题。
115 3
引用和指针傻傻分不清
🐰引用和指针的区别 🌸从现象上看 🌸从编译上看 🤔提示
<C++>一篇文章搞懂类和对象中常函数和常对象的实质以及避免空指针访问的小妙招
<C++>一篇文章搞懂类和对象中常函数和常对象的实质以及避免空指针访问的小妙招
198 0

热门文章

最新文章

下一篇
oss创建bucket
AI助理

你好,我是AI助理

可以解答问题、推荐解决方案等