2011-09-04 75 views
0

理想情況下,我想在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

有兩種方法去這個問題:

第一隻需要輕微修改您的代碼將讓你做你想要什麼: 在功能可按東西通過可變數組作爲附加參數。

function_something(theObject_fixed, arrayOfThings); 

然後改變function_something來接受該參數。

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

另外,在我看來最好的解決辦法是爲function_something返回固定的字符串作爲一個NSString對象,讓東西也將增加了可變數組。 因此,我們得到這樣的事情在東西

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

然後重新定義* function_something *:

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

順便說一句,你的代碼泄漏內存。小心你保留/釋放/ autorelease。

+0

謝謝,我選擇了你的第二個解決方案,它完美的工作!順便說一下,你能解釋一下它爲什麼會泄漏嗎? – b1onic

+0

函數function_something你正在使用alloc/init所以保留計數是1在該字符串,它永遠不會被釋放。 – aLevelOfIndirection

相關問題