Добавить объекты в NSMutableArray, объявленный в другой функции - PullRequest
0 голосов
/ 04 сентября 2011

В идеале я хотел бы сделать так, чтобы функция добавляла объекты в NSMutableArray, а затем делала все, что я хочу, с этим массивом в другой функции.

Вот что я пытался сделать в последнее время, конечно, это не работает, но дает представление о том, что я хочу сделать:

- (void)someThing 
{  
   (...)

NSMutableArray *arrayOfThings = [[NSMutableArray alloc] init];

while (theObject = [aNSEnumerator nextObject]) {
   const char *theObject_fixed = [theObject UTF8String]; 

   function_something(theObject_fixed);
}

// do something with arrayOfThings


}



void function_something(const char *file)
{

    (...)


unsigned int *p = memmem(buffer, fileLen, bytes, 4);

NSMutableString *aString = [[NSMutableString alloc] initWithCapacity:48];

unsigned long off_to_string = 0x10 + 4 + ((void *)p) - ((void *)buffer);

for (unsigned long c = off_to_string; c<off_to_string+0x30; c++)
{

[aString appendFormat:@"%.2x", (int)buffer[c]];

}

 NSLog(@"%s: %@", file, aString);   

[arrayOfThings addObject:[aString copy]];

 free(buffer);

1 Ответ

1 голос
/ 05 сентября 2011

Есть два способа сделать это:

Первый требует лишь небольшой модификации вашего кода, что позволит вам делать то, что вы хотите: В функции someThing передать изменяемыймассив в качестве дополнительного параметра.

function_something(theObject_fixed, arrayOfThings);

Затем измените function_something, чтобы принять этот параметр.

void function_something(const char *file, NSMutableArray *arrayOfThings) {
    // Code remains the same
}

Другим и, на мой взгляд, лучшим решением будет возвращение фиксированной строки для function_something.в качестве объекта NSString и пусть someThing выполняет добавление в изменяемый массив.Таким образом, мы получаем что-то вроде этого в someThing :

...
NSString *aString = function_something(theObject_fixed);
[arrayOfThings addObject:aString];

И затем переопределенный * function_something *:

NSString* function_something(const char *file) {
    ...
    return [aString autorelease];
}

Кстати, ваш код утечка памяти,Будьте осторожны с сохранением / разблокировкой / автоматическим выпуском.

...