2011-09-04 7 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

이것에 대해 이동하는 방법은 두 가지가 있습니다 :

첫 번째는 당신이 원하는 일을 할 수 있도록 코드 만 약간의 수정이 필요합니다 추가 매개 변수로 변경 가능한 배열을 전달 funciton 뭔가 .

function_something(theObject_fixed, arrayOfThings); 

그런 다음 function_something을 변경하여 해당 매개 변수를 허용하십시오. function_something가있는 NSString 객체로 고정 된 문자열을 반환하고, 변경이 용이 한 배열에 추가 할뭔가를 할 수 있도록

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

다른 내 의견에 더 나은 솔루션이 될 것입니다. 다음 재정의 * function_something *

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

그리고 :

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

, 코드가 누출 된 메모리를 그래서 우리는 뭔가이 뭔가를 얻을. 당신이/release/autorelease를 유지하는 것에 조심하십시오.

+0

감사합니다. 두 번째 솔루션을 선택했는데 완벽하게 작동합니다! 그건 그렇고, 내가 누출 된 이유를 설명해 줄 수 있니? – b1onic

+0

함수의 function_something에 alloc/init을 사용하고 있으므로 해당 문자열에서 보유 개수가 1이므로 결코 해제되지 않습니다. – aLevelOfIndirection

관련 문제