在另一个函数中声明的NSMutableArray中添加对象

时间:2011-09-04 19:19:10

标签: objective-c c variables nsmutablearray

理想情况下,我想在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 个答案:

答案 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];
}

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