Как реализовать целевой механизм действия для пользовательского элемента управления?

Необходимо также заботиться при выполнении таких сравнительных тестов. Некоторые алгоритмы будут иметь поведение в большой степени зависящим от входного типа.

Берут Quicksort, например. Это - худший случай O (nВІ), но обычно O (nlogn). Для двух исходных данных того же размера.

коммивояжер (я думаю, не уверенный) O (nВІ) ( РЕДАКТИРОВАНИЕ: правильное значение 0 (n!) для грубой силы algotithm ), но большинство алгоритмов получает довольно хорошие приближенные решения намного быстрее.

Это означает, что структура сравнительного тестирования имеет к большей части времени быть адаптированной на специальной основе. Предположите писать что-то универсальное для этих двух упомянутых примеров. Это было бы очень сложно, вероятно, неприменимо, и вероятно будет давать неправильные результаты так или иначе.

16
задан 17 August 2009 в 16:22
поделиться

2 ответа

Поскольку вы планируете создать подкласс UIControl, вы можете просто использовать

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

Используя это, любой класс может зарегистрировать себя в качестве цели для любых событий, которые он захочет на вашем настраиваемом контроллере.

5
ответ дан 30 November 2019 в 15:21
поделиться

Вы правильно поняли. Вот как я бы это сделал:

@interface TargetActionPair : NSObject
{
    id target;
    SEL action;
}
@property (assign) id target;
@property (assign) SEL action;
+ (TargetActionPair *)pairWithTarget:(id)aTarget andAction:(SEL)selector;
- (void)fire;
@end

@implementation TargetActionPair
@synthesize target;
@synthesize action;

+ (TargetActionPair *)pairWithTarget:(id)aTarget andAction:(SEL)anAction
{
    TargetActionPair * newSelf = [[self alloc] init];
    [newSelf setTarget:aTarget];
    [newSelf setAction:anAction];
    return [newSelf autorelease];
}

- (void)fire
{
    [target performSelector:action];
}

@end

Имея этот класс, сохранить ваши пары цель / действие довольно просто:

MyCustomControl.h:

#import "TargetActionPair.h"

@interface MyCustomControl : UIControl
{
    NSMutableArray * touchUpEventHandlers;
}

- (id)init;
- (void)dealloc;

- (void)addHandlerForTouchUp:(TargetActionPair *)handler;

@end

MyCustomControl.m:

#import "TargetActionPair.h"

@implementation MyCustomControl

- (id)init
{
    if ((self = [super init]) == nil) { return nil; }
    touchUpEventHandlers = [[NSMutableArray alloc] initWithCapacity:0];
    return self;
}

- (void)dealloc
{
    [touchUpEventHandlers release];
}

- (void)addHandlerForTouchUp:(TargetActionPair *)handler
{
    [touchUpEventHandlers addObject:handler];
}

- (void) fireTargetsForTouchUpEvent
{
    [touchUpEventHandlers makeObjectsPerformSelector:@selector(fire)];
}

@end

После этого настройте управление будет осуществляться следующим образом:

[instanceOfMyControl addHandlerForTouchUp:
         [TargetActionPair pairWithTarget:someController
                                andAction:@selector(touchUpEvent)];
15
ответ дан 30 November 2019 в 15:21
поделиться
Другие вопросы по тегам:

Похожие вопросы: