理想情况下,我想在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);
答案 0 :(得分:1)
有两种方法可以解决这个问题:
第一个只需要稍微修改一下你的代码即可让你做你想做的事: 在函数中, 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];
}
顺便说一下,你的代码正在泄漏内存。保留/释放/自动释放时要小心。