首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

扩展NSMutableArray以进行双向关联管理

NSMutableArray是Objective-C中的一个动态数组,它可以存储多个对象,并且可以动态地扩展和收缩数组的大小。在进行双向关联管理时,可以通过扩展NSMutableArray来实现。

双向关联管理是指在两个对象之间建立双向的关联关系,使得一个对象可以直接访问到与之相关联的其他对象。在NSMutableArray中进行双向关联管理可以通过自定义分类(Category)来实现。

首先,创建一个名为NSMutableArray+Association的分类文件。在该文件中,我们可以添加一些方法来实现双向关联管理。以下是一个示例:

代码语言:objective-c
复制
#import <Foundation/Foundation.h>

@interface NSMutableArray (Association)

- (void)addObject:(id)object withAssociatedObject:(id)associatedObject;
- (void)removeObject:(id)object withAssociatedObject:(id)associatedObject;
- (id)associatedObjectForObject:(id)object;

@end

@implementation NSMutableArray (Association)

- (void)addObject:(id)object withAssociatedObject:(id)associatedObject {
    [self addObject:object];
    objc_setAssociatedObject(object, (__bridge const void *)(self), associatedObject, OBJC_ASSOCIATION_RETAIN);
}

- (void)removeObject:(id)object withAssociatedObject:(id)associatedObject {
    [self removeObject:object];
    objc_setAssociatedObject(object, (__bridge const void *)(self), nil, OBJC_ASSOCIATION_RETAIN);
}

- (id)associatedObjectForObject:(id)object {
    return objc_getAssociatedObject(object, (__bridge const void *)(self));
}

@end

在上述示例中,我们定义了三个方法:

  • addObject:withAssociatedObject::用于向NSMutableArray中添加对象,并与一个关联对象进行关联。
  • removeObject:withAssociatedObject::用于从NSMutableArray中移除对象,并解除与关联对象的关联。
  • associatedObjectForObject::用于获取与指定对象关联的关联对象。

通过使用这些方法,我们可以在NSMutableArray中实现双向关联管理。例如:

代码语言:objective-c
复制
NSMutableArray *array = [NSMutableArray array];

// 添加对象并进行关联
NSString *object1 = @"Object 1";
NSString *associatedObject1 = @"Associated Object 1";
[array addObject:object1 withAssociatedObject:associatedObject1];

// 添加另一个对象并进行关联
NSString *object2 = @"Object 2";
NSString *associatedObject2 = @"Associated Object 2";
[array addObject:object2 withAssociatedObject:associatedObject2];

// 获取与对象1关联的关联对象
NSString *associatedObjectForObj1 = [array associatedObjectForObject:object1];
NSLog(@"%@", associatedObjectForObj1); // 输出:Associated Object 1

// 移除对象1并解除关联
[array removeObject:object1 withAssociatedObject:associatedObject1];

// 再次获取与对象1关联的关联对象
NSString *associatedObjectForObj1AfterRemoval = [array associatedObjectForObject:object1];
NSLog(@"%@", associatedObjectForObj1AfterRemoval); // 输出:(null)

以上示例演示了如何使用扩展的NSMutableArray进行双向关联管理。在实际应用中,可以根据具体需求扩展更多的方法来满足不同的场景。

腾讯云相关产品和产品介绍链接地址:

页面内容是否对你有帮助?
有帮助
没帮助

相关·内容

如何将Postman API测试转换为JMeter进行扩展

Postman API Testing Limitations 可扩展性 Postman测试无法扩展。...性能测试能力 由于可扩展性限制,Postman不适合API性能测试。性能测试要求同时针对多个线程(用户)运行测试,确保系统在重负载下不会中断。...何时将Postman测试转换为JMeter测试 您可能希望将现有的Postman测试转换为JMeter获得以下好处: 多线程执行 获取API的性能指标 获得高级报告,并将不断增加的负载与响应时间,错误数量等相关联...如果存在任何HTTP标头,JMeter将添加一个HTTP标头管理将标头添加到请求中。...具有动态参数自动关联的功能。 局限性 请记住,这种方法仅适用于仅记录请求。您在“先决条件”下定义的所有脚本。或Postman中的“测试”标签将不被考虑。

40740
  • 拼图游戏和它的AI算法

    一个状态应持有以下几个属性: 矩阵阶数 方块数组,数组的顺序来表示本状态下方块的排列顺序 空格所在的位置,其值指向方块数组中显示成空白的那一个方块 同时它应能提供操作方块的方法,演进游戏状态。...2、然后还需要把所有已搜索过的状态记录下来,确保不会对已搜索过的状态作重复扩展,注意这里的扩展即为衍生出子状态,对应于拼图游戏来说就是空格移动了一格。...3阶方阵,广搜平均需要搜索10万个状态 双向广度优先搜索 双向广度优先搜索是对广度优先搜索的优化,但是有一个使用条件:搜索路径可逆。...所以,我们的拼图游戏是路径可逆的,适合双向广搜。...NSMutableArray *childStatus = [status childStatus]; // 对各个子状进行代价估算 [childStatus

    2.5K110

    将判断 NSArray 数组是否包含指定元素的时间复杂度从 O(n) 降为 O(1)

    当我们需要频繁进行该操作时,可能会存在较大的性能问题。 该问题背后的原因很简单。官方文档明确指出 NSArray 从第 0 位开始依次判断是否相等,所以判断次数是 n (n 等于数组长度) ?...php 中的数组 首先,我们先对 php 的数组进行一些了解 在 php 中,数组提供了一种特殊的用法:关联键的数组。...关联键的数组 非常类似于其它语言的 map 或者 字典 // 普通数组 $cars = array("Volvo", "BMW", "Toyota"); var_dump($cars); // 关联键的数组...所以,普通数组可以转为 关联键的数组 的写法 ?...: + (void)load { NSMutableArray *arr = [NSMutableArray array]; // 填充数组 for (int i=0; i<5;

    1.8K20

    iOS开发·runtime原理与实践: 关联对象篇(Associated Object)(应用场景:为分类添加“属性”,为UI控件关联事件Block体,为了不重复获得某种数据)

    什么是关联对象 1.1 关联对象 分类(category)与关联对象(Associated Object)作为objective-c的扩展机制的两个特性:分类,可以通过它来扩展方法;Associated...1.2 如何关联对象 runtime提供了給我们3个API管理关联对象(存储、获取、移除): //关联对象 void objc_setAssociatedObject(id object, const...void *key:关联的key,要求唯一 id value:关联的对象 objc_AssociationPolicy policy:内存管理的策略 2....这可以通过关联对象来做。创建完警告视图之后,设定一个与之关联的“块”(block),等到执行delegate方法时再将其读出来。下面对此方案进行改进。...有的,方案就是让某个对象的方法获得的数据结果作为“属性”与这个对象进行关联

    2.7K20

    iOS获取通讯录联系人信息 原

    ABAddressBookCopyArrayOfAllPeople(addBook);     //获取联系人总数     CFIndex number = ABAddressBookGetPersonCount(addBook);     //进行遍历...NSDictionary dictionaryWithObject:data forKey:str];             [dateArr addObject:temDic];         } 一点扩展...:相同的方法,可以获取关联人信息,社交信息,邮箱信息,各种类型的电话信息,字段如下:  //相关人,组织字段 const ABPropertyID kABPersonKindProperty;  const...addBook, people,NULL);         }     }     // 保存修改的通讯录对象     ABAddressBookSave(addBook, NULL); 四、重中之重-关于内存管理...上面的代码为了演示方便,创建的全部引用都没有释放,势必是造成内存泄露,在我们用ABAddressBookCreate()创建一个引用对象时,切记无论ARC还MRC,要用CFRelease()进行释放引用

    1.2K40

    初始Streams Replication Manager

    SRM还提供了自定义扩展,可促进安装、管理和监视,从而使SRM成为针对任务关键型工作负载而构建的完整复制解决方案。...流复制管理服务 流复制管理服务是由开源Cloudera扩展提供支持的服务,这些扩展利用了流复制引擎的功能。...这些服务提供: • 简易安装 • 生命周期管理管理和监视跨集群的复制流 流复制管理服务包括以下自定义扩展: Cloudera SRM驱动程序 Cloudera SRM驱动程序是Stream...可配置的时间间隔,将检查点记录发送到下游集群,对白名单的消费者组和主题分区的最新偏移量进行编码。与主题一样,组与白名单匹配,该白名单可以通过srm-control动态更新。...双向复制流程 了解有关双向复制流的更多信息。 SRM理解循环,并且永远不会在无限循环中复制记录。这样就可以实现双向复制流,其中集群可以相互复制。

    1.3K10

    iOS获取通讯录联系人信息

    IOS关于通讯录的开发有两种,一种是直接调用系统的通讯录界面,根据回调信息处理数据,另一种是直接获取系统的通讯录,完全自定义UI,并且可以通过官方给我们提供的接口进行读写。...NSDictionary dictionaryWithObject:data forKey:str];             [dateArr addObject:temDic];         } 一点扩展...:相同的方法,可以获取关联人信息,社交信息,邮箱信息,各种类型的电话信息,字段如下:  //相关人,组织字段 const ABPropertyID kABPersonKindProperty;  const..., people,NULL);         }     }     // 保存修改的通讯录对象     ABAddressBookSave(addBook, NULL); 四、重中之重-关于内存管理...上面的代码为了演示方便,创建的全部引用都没有释放,势必是造成内存泄露,在我们用ABAddressBookCreate()创建一个引用对象时,切记无论ARC还MRC,要用CFRelease()进行释放引用

    1.6K40

    iOS开发--我与面试官有个约会

    当policy为OBJC_ASSOCIATION_ASSIGN的时候,设置的关联值将是以weak的方式进行内存管理的。...如果是通过alloc、new、retain、copy 创建出来的对象怎么进行处理?(通过arc内部进行引用计数来进行管理的 自动释放池是以栈为节点通过双向链表组合而成的一种结构。...扩展的作用和特点 作用 声明私有属性(可不对子类暴露) 声明私有方法 声明私有成员变量 特点 编译时决议 只声明的形式存在,多数情况下寄生于宿主类中的.m文件中 不能为系统类添加扩展 分类和扩展的区别...分类是运行时决议,而扩展是编译时决议(因此扩展可以直接添加成员变量,而分类要通过关联对象的形式) 分类可声明可实现,而扩展只有声明。...可以通过关联对象的方式为分类添加成员变量。关联对象由AssociationsManager管理并在AssociationsHashMap中存储。所有对象的关联内容都被放在一个统一的全局容器中。

    2.6K40

    【金猿CIO展】铁科信息化管理部部长王旭:智能制造为方向进行企业数智化转型

    我深切体会到,在这样的大背景下,企业必须拥有更广阔的视野,适应这个快速变化的新时代。 国家层面对制造企业的要求也在不断提升,智能制造的概念提上了日程,成为国家战略的重点之一。...此外,数字化和信息化进程对人才的要求也越来越高,不仅需要专业能力,更需要具备多方面技能的T型和π型人才,实现数字技术、程序能力和业务能力的有效整合。...在寻找合作方的过程中,我们进行了全面的市场调研,并基于以往对不同数字化产品的试用和经验积累,经过严谨的分析和比较,最终决定选择鼎捷雅典娜平台。...智能制造的全局视角规划未来 作为一家承担社会责任的国有企业,铁科的发展紧密响应国家智能制造战略。...铁科的经验沉淀在多个方面:团队成员的年轻化,确保了活力与创新;转型过程中的稳扎稳打,保证了平稳过渡;思维的转变与管理的先行,引领了整个过程的顺利进行;同时,我们对合作伙伴进行了严格的筛选与匹配,确保了资源的最优配置

    17510

    iOS 二级菜单(UITableView实现)「建议收藏」

    默认子控件是关闭的 } return self; } @end 在.storyboard 中拖一个uiviewtable的控件;并且与设置属性 就是下面的TableView 并建立关联...如果有那么我们先将这些子菜单想办法添加到掌管父菜单的数组中,然后生成一个位置数组(为了在tableview中调用 insertRowsAtIndexPaths: withRowAnimation: 这个函数进行插入操作并且带有动画...的两个代理 @property (weak, nonatomic) IBOutlet UITableView *TableView;//UItableiew与.storyboard中拖的uitableview关联...(nonatomic,strong) NSMutableArray * InsertArry;//中间处理过程数组,用于插入子视图 @property (nonatomic,strong) NSMutableArray...alloc]init]; _DeleteArry = [[NSMutableArray alloc]init]; // Do any additional setup after

    1.2K30

    找回知识图谱的力量:Lattics 易用有效的笔记软件和写作工具

    双向链接确实好用,是构建知识管理体系和网络的利器。与此同时,知识图谱也是双向链接笔记软件的主要功能。知识图谱使用的迷思然而,在使用形形色色的各类双链笔记软件之后,发现我实际上很少使用图谱功能。...知识图谱使用优化方案针对知识图谱的现有问题,存在两个解决方案:使用其他工具进行辅助。使用某种笔记法提高知识管理能力。使用其他工具进行辅助使用其他工具进行辅助。比如,使用白板作为载体。...一般翻译为「内容地图」,核心思想是在文字表达过程中善用双向链接,即通过文字将不同内容进行关联。用户可以文字的灵活性,轻松表达多种关系。...这种方法的优点是不局限于笔记软件,只要这个笔记软件支持基本的双向链接、图谱功能就可以践行。具体介绍,推荐阅读原文:「释放双链笔记图谱的力量——KG笔记法」如何选择知识管理工具?...3.3 如果存在以前写过的相关卡片笔记,我们可以选择从「卡片库」插入已有关联卡片,随后再进行重新编辑。

    79020

    iOS - 老生常谈内存管理(三):ARC 面世

    ARC是一种编译器功能,它通过LLVM编译器和Runtime协作来进行自动管理内存。...摘要 ARC的工作原理是在编译时添加相关代码,确保对象能够在必要时存活,但不会一直存活。从概念上讲,它通过为你添加适当的内存管理方法调用来遵循与MRC相同的内存管理规则。...须遵守内存管理的方法命名规则 在MRC下,通过 alloc / new / copy / mutableCopy 方法创建对象会直接持有对象,我们定义一个 “创建并持有对象” 的方法也必须 alloc...对内存分配的区域本身进行多重化管理,根据使用对象的目的、对象的大小分配内存,从而提高了内存管理的效率。 但是,现在的运行时系统已经忽略了区域的概念。...下面NSMutableArray对象和CFMutableArrayRef对象为例: // 本来由 ARC 管理 NSMutableArray *mArray = [[NSMutableArray

    2.1K10

    iOS开发封装一个可以响应超链接的label——基于RCLabel的交互扩展

    RCLabel是一个第三方的将html字符串进行文本布局的工具,代码十分轻巧,并且其是基于CoreText框架的,其原生性和扩展性十分强。...在以前的一篇博客中,我将RCLabel进行了一些改进,使其支持异步加载远程图片,并且提供了更加简洁的面向应用的方法,博客地址如下: 扩展于RCLabel的支持异步加载网络图片的富文本引擎的设计:http...二、视图类与模型类的设计         RCLabel的核心之处在于将HTML文本转换为富文本布局视图,因此我们可以将要显示的文本编程html字符串,将其可以进行用户交互的部分进行html超链接关联,...设计类如下: .h文件 //文本与超链接地址关联的model类 后面会说 @class YHBaseLinkingLabelModel; @protocol YHBaseLinkingLabelProtocol... * array = [[NSMutableArray alloc]init];     for (int i=0; i<6; i++) {         YHBaseLinkingLabelModel

    1.1K10
    领券