zoukankan      html  css  js  c++  java
  • ios之BlocksKit源码学习1-UIControl

    - (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事件。

  • 相关阅读:
    hdu 4474 大整数取模+bfs
    Codeforces Mafia
    hdu 4750 Count The Pairs(并查集)
    zoj 3659 Conquer a New Region(并查集)
    zoj 3656
    poj 3678 Katu Puzzle(Two Sat)
    UVa 11235 RMQ
    hdu 4768 Flyer (二分)
    hdu 4762 Cut the Cake概率公式
    Ural 1046 Geometrical Dreams(解方程+计算几何)
  • 原文地址:https://www.cnblogs.com/sfce/p/4427916.html
Copyright © 2011-2022 走看看