理想情况下,我想让一个函数在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];
}
顺便说一句,您的代码正在泄漏内存。保留/释放/自动释放时要小心。