是否有可能在Objective-C中做这样的事情,比如说我的数组数是X,那么当它发生时我希望它触发函数Y?那么,NSArray计数的监听者呢?关于NSMutableArray的大小的监听器和观察者
回答
我相信你可以创建一个观察者来监听数组的变化。当触发它时,您可以检查数组的大小,并在条件满足时调用方法Y.
您可以编写一个协议(例如称为MutableArrayDelegate
),然后扩展NSMutableArray
(确保正确调用[super ...]
),在某些事件发生时调用委托方法。
@protocol MutableArrayDelegate
- (void)mutableArrayDidAddObject:(NSMutableArray *)mutableArray;
@end
@interface ObservableMutableArray : NSMutableArray
@property (nonatomic, assign) id<MutableArrayDelegate> delegate;
@end
@implementation ObservableMutableArray
@synthesize delegate;
- (void)addObject:(id)anObject
{
[super addObject:anObject];
[delegate mutableArrayDidAddObject:self];
}
@end
然后,您可以通过分配委托给子类和实施协议侦听事件:
例如,每次添加一个对象时添加监听。
如果你继承NSArray,你必须重写原始实例方法count和objectAtIndex:对于NSMutableArray,你需要重写更多的方法:http://developer.apple.com/library/ mac /#documentation/Cocoa/Reference/Foundation/Classes/NSMutableArray_Class/Reference/Reference.html#// apple_ref/occ/cl/NSMutableArray – hypercrypt
我的不好。听起来就像你会打电话给'[super ...]'很多...真的值得downvote?仍然提供了期望的结果。 – sho
不,调用'super'是不够的,你需要自己实现它。 “NSArray”和“NSMutableArray”是类集群,它们本身不执行任何操作。当你创建一个数组时,你会得到一个私有子类,通常这对于用法并不重要,只是一个实现细节,但这意味着当子类化时需要自己实现原始实例方法和存储器时,不能依赖'super'。 – hypercrypt
- 1. 斯卡拉监听器/观察员
- 2. 在复制构造函数中复制监听器/观察者
- 3. 使用GreenDao实现事件监听器/观察者模式
- 4. 关于数据集的观察者
- 5. 关于观察者模式的原型
- 6. 观察者可以安全地使用Rx监听多个观察对象吗?
- 7. Java观察者和可观察的
- 8. 当观察者的观察者的寿命长于可观察到的
- 9. 释放Objective-C中的监听器/观察器?
- 10. 观察用于插入/删除的NSMutableArray
- 11. 组件#removeAll()是否清理已删除控件的观察者/监听者?
- 12. NSTableView的documentView大小观察
- 13. 观察者模式文件监视权?
- 14. 观察者设计模式vs“听众”
- 15. 观察者模式 - 观察者创建
- 16. 为应用程序实现通用观察者模式/监听器
- 17. 观察者python中的可观察类
- 18. Java中的观察者模式 - 观察者观察不同的,不相关的类型或类?
- 19. 关于iPad中的关键值观察者
- 20. 关于Javascript/Jquery的监听器
- 21. 用于ViewPart的Java关闭监听器
- 22. 听众和观察者之间有概念上的区别吗?
- 23. 观察者模式中的关系
- 24. 观察者设计模式 - 具体主题和观察者
- 25. 基于类型的C#观察者?
- 26. jQuery和观察者模式
- 27. addObserverForName和删除观察者
- 28. MVC和观察者模式
- 29. Vue.js和观察者模式
- 30. Base.save,回调和观察者
这是非常类似于您的问题:http://stackoverflow.com/questions/302365/observing-an-nsmutablearray-for-insertion-removal。 – Johnnywho