Как уничтожить селектор, который установлен стрелять после задержки (на iPhone)?

Можно сделать этот путь -

int[] terms = new int[400];
for (int runs = 0; runs < 400; runs++)
{
    terms[runs] = value;
}

, С другой стороны, можно использовать Списки - преимущество со списками быть, Вы не должны знать размер массива при инстанцировании списка.

List termsList = new List();
for (int runs = 0; runs < 400; runs++)
{
    termsList.Add(value);
}

// You can convert it back to an array if you would like to
int[] terms = termsList.ToArray();

Редактирование: a) для циклы на List< T> являются больше чем в 2 раза более дешевыми, чем foreach циклы на List< T>, b) Цикличное выполнение на массиве является приблизительно в 2 раза более дешевым, чем цикличное выполнение на List< T>, c) цикличное выполнение на массиве с помощью для является в 5 раз более дешевым, чем цикличное выполнение на List< T> с помощью [1 110] foreach (который большинство из нас делает).

6
задан Keavon 18 May 2014 в 17:18
поделиться

2 ответа

Поскольку я использую performSelector: afterDelay, единственный способ, которым я смог правильно "убить" любую ранее запрошенную, но не запущенную функциональность, - это использовать:

[NSObject cancelPreviousPerformRequestsWithTarget:self selector:theBall object:nil];

В следующем примере кода показано как это работает (создайте новый проект XCode шаблона представления под названием "select" и замените файл selectViewController.h этим):

#import "selectViewController.h"

@implementation selectViewController

UILabel *lblNum;
UIButton *btnStart, *btnStop;
int x;

- (void) incNum {
    x++;
    lblNum.text = [NSString stringWithFormat:@"%i", x];
    [self performSelector:@selector(incNum) withObject:NULL afterDelay:1.0];
}

- (void) stopCounter {
    [NSObject cancelPreviousPerformRequestsWithTarget:self selector:@selector(incNum) object:NULL];
}

- (void)viewDidLoad {
    x = 0;

    lblNum = [[UILabel alloc] initWithFrame:CGRectMake(0, 0, 320, 460)];
    lblNum.textAlignment = UITextAlignmentCenter;
    [self.view addSubview:lblNum];

    btnStart = [UIButton buttonWithType:UIButtonTypeRoundedRect];
    btnStart.frame = CGRectMake(40, 270, 240, 30);
    [btnStart setTitle:@"start" forState:UIControlStateNormal];
    [btnStart addTarget:self action:@selector(incNum) forControlEvents:UIControlEventTouchUpInside];
    [self.view addSubview:btnStart];

    btnStop = [UIButton buttonWithType:UIButtonTypeRoundedRect];
    btnStop.frame = CGRectMake(40, 310, 240, 30);
    [btnStop setTitle:@"stop" forState:UIControlStateNormal];
    [btnStop addTarget:self action:@selector(stopCounter) forControlEvents:UIControlEventTouchUpInside];
    [self.view addSubview:btnStop];

    [self performSelector:@selector(incNum) withObject:NULL afterDelay:1.0];
    [super viewDidLoad];
}


- (void)didReceiveMemoryWarning {
    [super didReceiveMemoryWarning];
}

- (void)viewDidUnload {
}

- (void)dealloc {
    [lblNum release];
    [super dealloc];
}

@end
15
ответ дан 8 December 2019 в 05:22
поделиться
Другие вопросы по тегам:

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