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


目录
相关文章
No module named ‘PyQt5.QtWebEngineWidgets‘
No module named ‘PyQt5.QtWebEngineWidgets‘
1102 0
|
10月前
|
存储 弹性计算 安全
🛡️ 新手避坑指南:阿里云首次购机必看的10个配置选项
一位创业公司技术负责人坦言,去年因误配云服务器多花近两万元。本文梳理首次购买阿里云ECS时必须关注的10大配置:地域可用区、实例规格、镜像选择、磁盘类型、网络带宽、安全组、计费模式、快照策略、标签管理及初始化检查。从性能、成本到安全,帮你避开常见坑点,迈出云上部署稳健第一步。(238字)
|
JavaScript 前端开发
如何在vscode上直接运行typescript
如何在vscode上直接运行typescript
3020 0
|
人工智能 自然语言处理 供应链
AI直播销售奇迹:00后DeepSeek的3.3亿真相探究
近日,“00后主播借DeepSeek技术直播卖出3.3亿”的新闻引发关注。此次成功不仅得益于主播个人魅力,更离不开“交个朋友”直播间团队对AI技术的深度融合。通过DeepSeek大模型,AI在内容生成、流程优化等方面大幅提升效率,实现了直播话术自动生成、多场景适配及全球化支持。团队还利用AI进行选品、合规审核和数据分析,优化直播策略。多位主播精细分工,结合强大的背景资源,确保高效带货。AI与真人主播互补,提升转化率。尽管存在版权、就业等争议,此次销售奇迹展示了AI技术商业化的潜力,并为行业提供了宝贵案例。
673 0
|
自然语言处理 监控 算法
【算法精讲系列】通义模型Prompt调优的实用技巧与经验分享
本文详细阐述了Prompt的设计要素,包括引导语、上下文信息等,还介绍了多种Prompt编写策略,如复杂规则拆分、关键信息冗余、使用分隔符等,旨在提高模型输出的质量和准确性。通过不断尝试、调整和优化,可逐步实现更优的Prompt设计。
5027 11
|
数据可视化 iOS开发 UED
解释 Auto Layout 是什么,如何使用它来布局界面?
解释 Auto Layout 是什么,如何使用它来布局界面?
541 2
|
存储 中间件 Java
iOS-底层原理 30:Block底层原理
iOS-底层原理 30:Block底层原理
706 0
iOS-底层原理 30:Block底层原理
|
安全
电脑开机显示节电模式,显示器显示不了,是什么原因?
电脑开机显示节电模式,显示器显示不了,是什么原因?
2728 0
|
网络安全 iOS开发
转载:Charles 使用过程中遇到问题
原文地址:https://www.cnblogs.com/1-434/p/7871865.html 1、部分APP无法正常请求网络;网页能打开,但是显示的全是HTML代码。
11045 0
|
关系型数据库 MySQL 数据库
Python实现数据库一键导出为Excel表格
依赖 Python2711 xlwt MySQLdb 数据库相关 连接 获取字段信息 获取数据 Excel基础 workbook sheet 案例 封装 封装之后 测试结果 总结 数据库数据导出为excel表格,也可以说是一个很常用的功能了。
2572 0

热门文章

最新文章