我有一个有很多实例的UIView,每个实例都有一个UIRecognizer。获取目标c中的类的所有实例?
当它们被点击时,我想删除所有其他的识别器。
我想让它得到该类的所有实例并删除它们的识别。
我知道ManagedObjects已经[Entity allObjects];
如何创建我的“所有对象”类的方法?
我有一个有很多实例的UIView,每个实例都有一个UIRecognizer。获取目标c中的类的所有实例?
当它们被点击时,我想删除所有其他的识别器。
我想让它得到该类的所有实例并删除它们的识别。
我知道ManagedObjects已经[Entity allObjects];
如何创建我的“所有对象”类的方法?
我有两个想法:
1 /创建一个类阵列的所有实例static NSArray* instances;
,注册它们初始化时,注销重新分配的时候。该数组应该只有弱引用,否则它们将永远不会被释放。
2/NSNotification。所有实例都可以等待通知,如果点击,则发送通知。
如果它们都是同一视图的所有子视图,则可以遍历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
}
如果您只是为了调试目的而需要查找所有实例,则可以使用Allocations
乐器并将Recorded Types
更改为仅适用于您的班级。这会给你一个所有对象的清单。然后您可以使用他们的地址使用lldb
与他们交互。
谢谢这真的很有帮助 – shannoga 2012-01-13 07:27:40