objective-c – 在NSMutableArray中观察计数

栏目: Objective-C · 发布时间: 7年前

内容简介:我希望在计数时得到通知,即. NSArray中的项目数量发生变化..当然我不需要这个,如果我控制添加和删除对象到数组中.但我不是,它在业务流程模型方面无法预测,并且取决于外部因素.有一些简单优雅的解决方案吗?

我希望在计数时得到通知,即. NSArray中的项目数量发生变化..

当然我不需要这个,如果我控制添加和删除对象到数组中.但我不是,它在业务流程模型方面无法预测,并且取决于外部因素.

有一些简单优雅的解决方案吗?

编辑:我当然正在纠正这个NSMutableArray ..

你需要使用 KVC

.但是如何去做呢?毕竟,NSMutableArray不符合其变异方法或内容更改的键值编码.答案是代理-as子类NS [Mutable]数组太麻烦了.

NSProxy是一个很棒的小类,你可以使用它来拦截发送到你的数组的消息,就好像你是一个NSMutableArray,然后将它们转发到一些内部实例.不幸的是,它也不符合KVC,因为KVC的胆量存在于NSObject中.那么我们必须使用它.示例界面可能如下所示:

@interface CFIKVCMutableArrayProxy : NSObject  {
    NSMutableArray *_innerArray;
}

- (NSUInteger)count;

- (void)insertObject:(id)anObject atIndex:(NSUInteger)index;
- (void)removeObjectAtIndex:(NSUInteger)index;
- (void)addObject:(id)anObject;
- (void)removeLastObject;
- (void)insertObjects:(NSArray *)objects atIndexes:(NSIndexSet *)indexes;
- (void)replaceObjectAtIndex:(NSUInteger)index withObject:(id)anObject;

//…

@end

正如您所看到的,我们正在模拟NSMutableArray的接口,这是必要的,因为我们的代理应该实现所有内容,就像它是NSMutableArray一样.这也使得实现尽可能简单,因为我们可以将选择器转发到我们的内部NSMutableArray指针.为了简洁起见,我将只实现两种方法来向您展示大致轮廓的样子:

@implementation CFIKVCMutableArrayProxy

//…

- (NSUInteger)count {
    return _innerArray.count;
}

- (void)addObject:(id)anObject {
    [self willChangeValueForKey:@"count"];
    [_innerArray addObject:anObject];
    [self didChangeValueForKey:@"count"];
}

- (void)removeLastObject {
    [self willChangeValueForKey:@"count"];
    [_innerArray removeLastObject];
    [self didChangeValueForKey:@"count"];
}

@end

如果您没有机会像这样包装数组,那么请尝试重新考虑您的代码.如果外部依赖项迫使您进入此类角落,请尝试将其删除.解决自己的 工具 总是一件坏事.

翻译自:https://stackoverflow.com/questions/10059279/observing-count-in-nsmutablearray


以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持 码农网

查看所有标签

本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们

了不起的Node.js

了不起的Node.js

劳奇 (Guillermo Rauch) / 赵静 / 电子工业出版社 / 2014-1 / 79.00元

本书是一本经典的 Learning by Doing的书籍。它由 Node社区著名的 Socket.IO作者—— Guillermo Rauch,通过大量的实践案例撰写,并由 Node社区非常活跃的开发者—— Goddy Zhao翻译而成。 本书内容主要由对五大部分的介绍组成: Node核心设计理念、 Node核心模块 API、Web开发、数据库以及测试。从前到后、由表及里地对使用 Node......一起来看看 《了不起的Node.js》 这本书的介绍吧!

CSS 压缩/解压工具
CSS 压缩/解压工具

在线压缩/解压 CSS 代码

SHA 加密
SHA 加密

SHA 加密工具

RGB CMYK 转换工具
RGB CMYK 转换工具

RGB CMYK 互转工具