2011-12-15 52 views
2

我有一个有很多实例的UIView,每个实例都有一个UIRecognizer。获取目标c中的类的所有实例?

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

我想让它得到该类的所有实例并删除它们的识别。

我知道ManagedObjects已经[Entity allObjects];

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

回答

5

我有两个想法:

1 /创建一个类阵列的所有实例static NSArray* instances;,注册它们初始化时,注销重新分配的时候。该数组应该只有弱引用,否则它们将永远不会被释放。

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

+0

谢谢这真的很有帮助 – shannoga 2012-01-13 07:27:40

-1

如果它们都是同一视图的所有子视图,则可以遍历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 
} 
0

如果您只是为了调试目的而需要查找所有实例,则可以使用Allocations乐器并将Recorded Types更改为仅适用于您的班级。这会给你一个所有对象的清单。然后您可以使用他们的地址使用lldb与他们交互。