2011-08-15 2 views
0

현재 외부 회사에서 개발 한 프로젝트를 개선하기 위해 노력하고 있습니다. 나는 아직 IOS 개발의 학습 단계에 있으므로 프로젝트가 끝날 때 상처를 입히지 않고 처음부터 올바르게 일을하고 싶습니다. 나는 프로젝트에서 Analyze를 실행 중이고 다음 코드 블록에서 166 행에 할당되고 'commandToSend'에 저장된 객체의 누출 가능성을 확인합니다.함수에서 반환하는 NSMutableData를 사용한 릴리스 이해

-(NSData*)GetBusinessCodeBase64:(NSString*)strBusiCode{ 
    NSArray *tmp_arr = [strBusiCode componentsSeparatedByString:@"-"]; 
    NSMutableData *commandToSend= [[NSMutableData alloc] init]; 
    unsigned char whole_byte; 
    char byte_chars[3] = {'\0','\0','\0'}; 
    int i; 
    for (i=0; i < [tmp_arr count]; i++) { 
     byte_chars[0] = [[tmp_arr objectAtIndex:i] characterAtIndex:0]; 
     byte_chars[1] = [[tmp_arr objectAtIndex:i] characterAtIndex:1]; 
     whole_byte = strtol(byte_chars, NULL, 16); 
     [commandToSend appendBytes:&whole_byte length:1]; 
    } 
    //NSData *result = [NSData dataWithData:commandToSend]; 
    //[commandToSend release]; 
    //return result; 
    return commandToSend; 
} 

내이의 조사는이 함수에 대한 호출이있는 NSData *이 반환되고 싶어한다는 것입니다. 그래서 나는 commandToSend의 직접 반환 대신에

NSData *result = [NSData dataWithData:commandToSend]; 
[commandToSend release]; 
return result; 

대신에 보았습니다.

누출없이 NSMutableData 객체를 반환하는 올바른 방법인가요? 아니면이 작업을 수행하는 다른 방법이 있습니까?

답변

0

변경 불가능한 NSData이 반환되도록하려는 경우 솔루션이 작동합니다. 다른 방법으로, commandToSend에 대한 정의를 변경할 수 있습니다 : NSMutableDataNSData의 서브 클래스이기 때문에 나는이 솔루션을 선호

NSMutableData *commandToSend = [NSMutableData data]; 
... 
return commandToSend; 

, 그것은 적은 코드와 완벽하게 괜찮이다. 그것은 당신에게 달려 있습니다.

관련 문제