Objective c addTarget:action:forControlEvents:方法是如何编程的?
在UIKit中,UIControl具有以下方法:Objective c addTarget:action:forControlEvents:方法是如何编程的?,objective-c,cocoa-touch,uikit,Objective C,Cocoa Touch,Uikit,在UIKit中,UIControl具有以下方法: addTarget:action:forControlEvents: removeTarget:action:forControlEvents: 我很想知道这些是如何编程的。是否有人可以指出这些方法是如何编程的(或提供一个如何编程的示例) 我已经为我自己正在工作的项目实现了类似的东西。然而,如果知道最好的技术,或者苹果是如何实现它的,那就太好了,因为这是一个有用的模式。(如果我没记错的话,它与委托模式不同吗?)这很简单。这里有一种方法可以让你
addTarget:action:forControlEvents:
removeTarget:action:forControlEvents:
我已经为我自己正在工作的项目实现了类似的东西。然而,如果知道最好的技术,或者苹果是如何实现它的,那就太好了,因为这是一个有用的模式。(如果我没记错的话,它与委托模式不同吗?)这很简单。这里有一种方法可以让你想象它是如何工作的:
@interface UIControlTargetActionPair
@property (nonatomic, assign) id target;
@property (nonatomic, assign) SEL action
@end
(使用@实现
来合成这些属性)
然后:
删除只需将pair对象从适当的数组中远程发送,发送事件的方式如下:
- (void)sendActionsForControlEvents:(UIControlEvents)controlEvents {
NSArray *pairs = [self mutableArrayOfTargetActionPairsForControlEvent:controlEvents];
for (UIControlTargetActionPair *pair in pairs) {
[[pair target] performSelector:[pair action] withObject:self withObject:theCurrentEvent];
}
}
当然,这不是实际的代码。但是,将代码放在我面前,这是一般原则。:) 这很简单。这里有一种方法可以让你想象它是如何工作的:
@interface UIControlTargetActionPair
@property (nonatomic, assign) id target;
@property (nonatomic, assign) SEL action
@end
(使用@实现
来合成这些属性)
然后:
删除只需将pair对象从适当的数组中远程发送,发送事件的方式如下:
- (void)sendActionsForControlEvents:(UIControlEvents)controlEvents {
NSArray *pairs = [self mutableArrayOfTargetActionPairsForControlEvent:controlEvents];
for (UIControlTargetActionPair *pair in pairs) {
[[pair target] performSelector:[pair action] withObject:self withObject:theCurrentEvent];
}
}
当然,这不是实际的代码。但是,将代码放在我面前,这是一般原则。:) @cs-Oops,我确实把这个问题解释错了。删除了我的答案:)@cs-Oops,我确实把问题解释错了。删除我的答案:)removeTarget:action:forControlEvents:如何实现?它是否列举了所有这些targetactionpairs,以查看它们是否符合要求,或者是否有更有效的方法?@icant这是一般原则。当然,有一些方法可以提高效率(使用查找表等)。但是,只有当您将性能度量为问题时,才需要进行性能优化。removeTarget:action:forControlEvents:是如何实现的?它是否列举了所有这些targetactionpairs,以查看它们是否符合要求,或者是否有更有效的方法?@icant这是一般原则。当然,有一些方法可以提高效率(使用查找表等)。但是,只有当您将性能衡量为一个问题时,才需要进行性能优化。