Я предложил бы простое обходное решение с общим международным массивом, где Вы могли записать идентификатор потока из потоков для доступа к нему позже.
Hope, которая помогает.
Нет ничего особенного для Objective-C с массивом целых чисел. Вы бы использовали ту же технику, как если бы вы использовали C.
sz = (sizeof foo) / (sizeof foo[0]);
В C. нет такой вещи, как array.length
. Массив int в Objective-C точно такой же , что и массив int в C. Если он статически определен как int foo [5]
, то вы можете выполнить sizeof (foo)
, чтобы получить размер, но только в той же функции foo
] определяется в (для других функций это просто указатель int, а не массив как таковой). В противном случае не существует естественного способа получить эту информацию. Вам нужно либо передать размер, либо использовать контрольные значения (например, завершающий '\ 0' в строках C, которые представляют собой просто массивы символов).
А? В языке C нет такого понятия, как "имя-массива.length". Массив примитивного типа, например int []
, не имеет информации о длине, связанной с ним во время выполнения.
Массив - это просто адрес памяти в начале блока памяти, выделенного для массива. Чтобы использовать его, вам нужно как-то запомнить длину после того, как он был создан. Вы можете либо передать длину каждой функции, либо обернуть массив и длину в другую структуру, передав эту структуру.
В C. не существует такой вещи, как имя-массива.длина
. Вот почему так много функций принимают пары аргументов: один аргумент с массивом и один аргумент длиной массив. Наиболее очевидным случаем для этого является функция main. Вы можете найти эту функцию во всех ваших проектах iPhone в файле с именем main.m
, она будет выглядеть примерно так:
int main(int argc, char *argv[]) {
NSAutoreleasePool * pool = [[NSAutoreleasePool alloc] init];
int retVal = UIApplicationMain(argc, argv, nil, nil);
[pool release];
return retVal;
}
Обратите внимание, что аргумент argv
является v ector или массив строк, а аргумент argc
представляет собой c количество элементов, которые находятся в этом массиве.
Вам нужно будет выполнить то же самое для всех примитивных типов, это часть C Objective-C. Если вы остаетесь в части Objective , использование NSArray или подклассов работает нормально,
Если вам нужен массив целых чисел, оберните их в объекты NSNumber и поместите в NSArray.
То, что вы просите сделать, на самом деле не поддерживается в C, хотя есть метод на Mac, который вы можете попробовать (malloc_size):
выглядит как задание для NSMutableArray
. есть ли причина, по которой вам нужно работать с массивом C? в противном случае рассмотрите NSMutableArray
.
я могу ошибаться (пожалуйста, поправьте меня, если я прав), но в C нет простого способа получить размер int [] во время выполнения. вам нужно будет сделать что-то вроде создания структуры для хранения вашего массива и int, где вы можете сами отслеживать, сколько элементов в вашем массиве.
Еще интереснее, вы можете заставить свою структуру содержать ваш массив и блок. тогда вы можете разработать блок для отслеживания за вас.
но это скорее вопрос C, а не вопрос target-c.