ускорение объявления NSMutableArray? - PullRequest
1 голос
/ 14 июля 2011

Мне нужно ускорить объявление двухмерного массива, и следующий «пример» слишком медленный, когда распределение выполняется так, как оно есть. Как я могу сделать распределение 10 столбцов, где каждый столбец может иметь до 20 элементов ... позволяя остаткам быть ноль / ноль. Есть ли для этого автоматизация, или мне нужно циклически проходить через каждый столбец и addObjects (SLOW) и инициировать с 20 объектами nil?

ppp = [NSMutableArray arrayWithCapacity: 10];

[ppp addObject:[[NSMutableArray alloc] initWithObjects:
                    @"1",
                    @"2",
                    @"3",
                    @"4",
                    nil
                    ]];

[ppp addObject:[[NSMutableArray alloc] initWithObjects:
                    @"a1",
                    @"b2",
                    @"c3",
                    nil
                    ]];

спасибо ...

(позвольте мне сказать это так: в "standard-c" я могу объявить "* char person [100] [100]" ... объявление пространства завершено. Теперь просто пишите по адресам. Динамическое распределение много перестановок строк, которые потребляют процессор и память. Есть ли что-то в "Objective-c" для выполнения чего-то, что делает NSArray * person [100] [100] ??)

1 Ответ

1 голос
/ 14 июля 2011

Вместо использования массива массивов, как вы это делаете, почему бы вам не использовать один NSMutableArray и вычислять строки и столбцы?Я знаю, что ваш 2d массив рваный, то есть каждый «под» массив может иметь разную длину, но вы можете рассчитать макс."width" и max "height" вашего стола и просто оставьте некоторые элементы свободными:

ppp = [[NSMutableArray alloc] initWithObjects:
    @"1", @"2", @"3", @"4", @"", @"",
    @"a1", @"b2", @"c3", @"", @"", @"",
    etc...
    ];

Теперь вы просто вычисляете item [1,2] как itemAt: 6 * 1 + 2.

Не уверен, поможет ли это, но это может ускорить процесс.

Альтернативой является использование вместо этого простых массивов C.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...