Вместо использования массива массивов, как вы это делаете, почему бы вам не использовать один 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.