理想情况下,我想让一个函数在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);

最佳答案

有两种解决方法:

第一个只需要对您的代码进行少量修改就可以执行您想做的事情:
在函数中,某些东西将可变数组作为附加参数传递。

function_something(theObject_fixed, arrayOfThings);


然后更改function_something以接受该参数。

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


在我看来,另一个更好的解决方案是让function_something返回固定字符串作为NSString对象,并让someThing将其添加到可变数组中。
因此,我们在某些方面得到了这样的东西:

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


然后重新定义* function_something *:

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


顺便说一句,您的代码正在泄漏内存。保留/释放/自动释放时要小心。

10-06 09:51
查看更多