Я все еще большой новичок, очень весело изучаю основы Objective-C, использую XCode, чтобы собрать несколько простых программ для OS-X.
У меня есть программа, которая оценивает пятикарточную покерную комбинацию.
Каждая карта в колоде идентифицируется по своему уникальному «порядковому номеру» (0-51)
Чтобы ускорить работу оценщика, я подумал, что было бы полезно иметь массив, содержащий все возможные комбинации из пяти индексов (их 2598960).
Если я сделаю это:
NSMutableArray *allPossibleHands = [[NSMutableArray alloc] initWithObjects: nil];
for(int i = 0; i<48; i++)
{
for(int j = i+1; j<49; j++)
{
for(int k = j+1; k<50; k++)
{
for(int m = k+1; m<51; m++)
{
for(int n = m+1; n<52; n++)
{
NSNumber *number0 = [NSNumber numberWithInt: i];
NSNumber *number1 = [NSNumber numberWithInt: j];
NSNumber *number2 = [NSNumber numberWithInt: k];
NSNumber *number3 = [NSNumber numberWithInt: m];
NSNumber *number4 = [NSNumber numberWithInt: n];
NSArray *nextCombination = [[NSArray alloc] initWithObjects: number0,number1,number2,number3,number4,nil];
[allPossibleHands addObject: nextCombination];
}
}
}
}
}
NSLog(@"finished building allPossibleHands. It contains %i objects", [allPossibleHands count]
);
кажется, все работает нормально, и я получаю сообщение о том, что мой массив содержит, как и ожидалось, 2598960 объектов. Затем я могу перечислить все элементы моего массива.
Но я подумал, что оборачивание моих объектов в объекты NSNumber должно занимать гораздо больше памяти. Возможно, лучше хранить индексные числа в виде коротких целых.
Однако, если вместо построения моего массива, как указано выше, я делаю это:
`short int allPossibleHands[2598960][5]`;
намереваясь затем использовать мой цикл для непосредственного хранения целых чисел, я получаю сообщение об ошибке EXC_BAD_ACCESS и замечание, что для программы нет доступной памяти.
Так почему же я могу хранить все эти объекты NSNumber, но не целые?
Есть ли какое-то правило о построении массива, которое я нарушаю?
Как всегда, любое руководство высоко ценится.
Спасибо, что прочитали это.