通过从函数返回的NSMutableData了解发布

时间:2011-08-15 05:57:44

标签: ios

目前,我正致力于为我们提升由外部公司开发的项目。我还处于IOS开发的学习阶段,所以我想确保我在开始时做正确的事情,而不是在项目结束时受到伤害。我在项目上运行Analyze并从下面的代码块中得到“在第166行分配的对象的潜在泄漏并存储到'commandToSend'中”。

-(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对象的正确方法,或者是否有其他方法我应该这样做。

1 个答案:

答案 0 :(得分:0)

如果您希望确保返回不可变NSData,则您的解决方案有效。或者,您可以将commandToSend的定义更改为:

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

我更喜欢这个解决方案,因为NSMutableDataNSData的子类,所以代码更少,完全没问题。这完全取决于你。