获取目标c中所有类的实例?

我有一个UIView,它有很多实例,每个实例都有一个UIRecognizer。

当点击它们时,我想删除其他人的所有识别器。

我希望它能获得该类的所有实例并删除它们的识别。

我知道[Entity allObjects];[Entity allObjects];

如何创建“所有对象”类方法?

我有两个想法:

1 /创建一个包含所有实例static NSArray* instances;的类数组static NSArray* instances; ,在初始化时注册它们,在解除分配时取消注册。 该数组应该只有弱引用,否则永远不会被释放。

2 / NSNotification。 所有实例都可以等待通知,如果您点击,则发送通知。

如果您只需要查找所有实例以进行调试,则可以使用Allocations工具并将Recorded Types更改为仅适用于您的类。 这将为您提供所有对象的花花公子列表。 然后,您可以使用lldb通过使用其地址与它们进行交互。

如果它们都是同一视图的子视图,您可以迭代parentView.subviews并以这种方式查找它们。 像这样的东西:

 for (UIView *v in parentView.subviews) { if ([v isKindOfClass:[MyViewClass class]]) { // remove recognizer here } } 

另一个更有效的选择是在视图控制器中有一个标志,你在第一个识别器被触发时设置,并用于短路任何未来的识别器处理程序调用。 像这样的东西:

 @property (nonatomic) BOOL shouldRespondToEvent; @synthesize shouldRespondToEvent=_shouldRespondToEvent; - (void)viewDidLoad { [super viewDidLoad]; self.shouldRespondToEvent = YES; // other viewDidLoad stuff here } - (void)gestureHandler:(UIGestureRecognizer*)recognizer { if (!self.shouldRespondToEvent) return; self.shouldRespondToEvent = NO; // rest of handler code here }