Создайте несколько пронумерованных переменных на основе интервала

Как я создал бы много NSDictionary переменные с помощью количества массива?

Это в основном, что я придумал, но я не уверен, как сделать эту работу с синтаксисом Objective C. doesntContainAnother NSArray. Я хочу, чтобы названия словарей использовали текущее значение loopInt.

int *loopInt = 0;
while (doesntContainAnother.count <= loopInt) {

    NSMutableDictionary *[NSString stringWithFormat:@"loopDictionary%i", loopInt] = [[[NSMutableDictionary alloc] init] autorelease];
    [NSString stringWithFormat:@"loopDictionary%i", loopInt] = [NSDictionary dictionaryWithObject:[array1 objectAtIndex:loopInt] 
                                                 forKey:[array2 objectAtIndex:loopInt]];
    loopInt = loopInt + 1;
}
5
задан jscs 14 April 2014 в 18:40
поделиться

2 ответа

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

Ваш код должен выглядеть так.

NSMutableArray *dictionaries = [[NSMutableArray alloc] init];
for (int i = 0; i < doesntContainAnother.count; i++) {
    [dictionaries addObject:[NSMutableDictionary dictionaryWithObject:[array1 objectAtIndex:i] forKey:[array2 objectAtIndex:i]]];
}

Подход, заключающийся в создании переменных с числами в конце их имен, является антипаттернным и даже невозможен в Objective-C. Это эквивалентно массиву, но неуклюже.

4
ответ дан 14 December 2019 в 13:35
поделиться

Я не думаю, что приоритет потока - это ваша проблема (хотя она может быть ее частью). Посмотрите на вопрос SO Приоритет потока фонового рабочего потока .

Вероятно, это слишком плотные петли в фоновом потоке, которые удерживают время ЦП на этом потоке. Существует несколько способов исправить его от брутального (нить спит) до более разумного (мутексы и события).

Можно также попробовать профилировать фоновый поток (непосредственно или в тестовом жгуте), чтобы увидеть, где он проводит большую часть своего времени, и попытаться изолировать его с помощью асинхронных событий или аналогичных методов разгрузки.

-121--3702221-

Обычно следует установить хороший уровень приоритета рабочего потока (например, пользователь может захотеть сделать что-то в другом приложении, и даже им рабочий поток должен хорошо играть) несмотря на то, что Windows уже увеличивает поток «активных» процессов (приложение у вас есть окно с фокусом ввода) немного, так что он будет чувствовать себя более отзывчивым. Более высокие приоритеты обычно необходимы, когда необходимо выполнить некоторые временные ограничения.

-121--3702224-

Необходимо создать изменяемый массив, а затем поместить объекты в массив. Невозможно создать переменную с тем же именем, что и содержимое последовательности. Например:

NSMutableArray *arr = [[NSMutableArray alloc] initWithCapacity:[doesntContainAnother count]];
int i = 0;    // Note: type is int, not int*
for (i = 0; i < [doesntCountainAnother count]; i++) {
    [arr addObject:[NSMutableDictionary dictionary]];
}

// Later...
NSMutableDictionary *d1 = [arr objectAtIndex:3];

Или если вы хотите вытащить их из списка по имени:

NSMutableDictionary *dict = [[NSMutableDictionary alloc] initWithCapacity:[doesntCountainAnother count]];
int i = 0;
for (i = 0; i < [doesntContainAnother count]; i++) {
    [dict setObject:[NSMutableDictionary dictionary] forKey:[NSString stringWithFormat:@"loopDictionary%d", i]];
}

// Later...
NSMutableDictionary *d1 = [dict objectForKey:@"loopDictionary3"];

Но первый способ, скорее всего, самый простой.

2
ответ дан 14 December 2019 в 13:35
поделиться
Другие вопросы по тегам:

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