Хабр Курсы для всех
РЕКЛАМА
Практикум, Хекслет, SkyPro, авторские курсы — собрали всех и попросили скидки. Осталось выбрать!
tableView.datasource = [ASPDelegate delegate:^(ASPDynamicDelegate* delegate){
[delegate addSelector:@selector(tableView:numberOfRowsInSection:) withBlock:^NSUInteger(id _s, NSTableView *tv, NSUInteger section){
return 10;
}]
}];
Это был всего лишь эксперимент, у меня не было желания написать этот код для использования в проектах.
struct ASPBlockDescriptor
{
__unused unsigned long int reserved;
__unused unsigned long int size;
union
{
struct
{
__unused void (*copy_helper)(void *dst, void *src);
__unused void (*dispose_helper)(void *src);
const char *copy_dispose_signature;
};
const char *usual_signature;
};
};
[object injectAfter:@selector(someMethod:) withBlock:^(id _s, ArgType arg){}];
_buttonOwner.strongPropertyForBlock = block
[button addTarget:block action:@selector(invoke) forControlEvents:UIControlEventTouchUpInside]typedef void (^ButtonExecutionBlock)(void);
@implementation UIButton (XYZ_SomeLabel)
- (void)XYZ_addBlock:(void (^)(id, UIControlEvents))block forEvent:(UIControlEvents)event
{
weakify(self)
ButtonExecutionBlock eventBlock = ^(void){
strongify(self)
block(self, event);
};
NSString *key = [NSString stringWithFormat:@"%lu", (unsigned long)event];
const char *cKey = [key cStringUsingEncoding:NSUTF8StringEncoding];
NSMutableArray *blocks = objc_getAssociatedObject(self, cKey);
if (blocks == nil) {
blocks = [NSMutableArray array];
objc_setAssociatedObject(self, cKey, blocks, OBJC_ASSOCIATION_RETAIN_NONATOMIC);
}
[blocks addObject:eventBlock];
[self addTarget:eventBlock
action:@selector(invoke)
forControlEvents:UIControlEventTouchUpInside];
}
@endЕсли бы Вы ограничили статью только темой «Разбираемся с NSMethodSignature на примере комбинирования stringWithFormat и NSArray» и убрали привязку к target-action
Да, ломается 2х строчное решение
Но это все равно меньше пары классов и статьи на пару А4. А по сути всего один метод у UIButton
1) target-action ни есть задача о performSelector:withObject:
До чего доводит идея (Objective-C) — target-action на блоках и много рантайма