2011-08-15 4 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 *が返されます。だから私はやってみた

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

直接の代わりにcommandToSend。

これは、NSMutableDataオブジェクトをリークせずに返す正しい方法ですか、これを行う必要がある他の方法があります。

答えて

0

不変のNSDataが返されるようにするには、ソリューションが機能します。また、あなたがcommandToSendの定義を変更することができます:

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

私はこのソリューションを好むだろう、それはNSMutableDataNSDataのサブクラスであるとして、以下のコードと完全に大丈夫です。それは本当にあなた次第です。