首页 > 移动平台 > 详细

ios之BlocksKit源码学习1-UIControl

时间:2015-04-15 13:06:34      阅读:804      评论:0      收藏:0      [点我收藏+]
- (void)bk_addEventHandler:(void (^)(id sender))handler forControlEvents:(UIControlEvents)controlEvents
{
    NSParameterAssert(handler);
    
    NSMutableDictionary *events = objc_getAssociatedObject(self, BKControlHandlersKey);
    if (!events) {
        events = [NSMutableDictionary dictionary];
        objc_setAssociatedObject(self, BKControlHandlersKey, events, OBJC_ASSOCIATION_RETAIN_NONATOMIC);
    }

    NSNumber *key = @(controlEvents);
    NSMutableSet *handlers = events[key];
    if (!handlers) {
        handlers = [NSMutableSet set];
        events[key] = handlers;
    }
    
    BKControlWrapper *target = [[BKControlWrapper alloc] initWithHandler:handler forControlEvents:controlEvents];
    [handlers addObject:target];
    [self addTarget:target action:@selector(invoke:) forControlEvents:controlEvents];
}

UIControl的

- (void)addTarget:(id)target action:(SEL)action forControlEvents:(UIControlEvents)controlEvents;

 方法对target不执行retain操作

将UIControl的实例关联一个NSMutableDictionary用来持有多个target的引用。

这个NSMutableDictionary 以UIControlEvents为Key,以NSMutableSet为Value。

NSMutableSet可添加多个target。

这样就实现了为UIControl添加多个Block事件。

ios之BlocksKit源码学习1-UIControl

原文:http://www.cnblogs.com/sfce/p/4427916.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!