我有一個有很多實例的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