目前,我正致力于为我们提升由外部公司开发的项目。我还处于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对象的正确方法,或者是否有其他方法我应该这样做。
答案 0 :(得分:0)
如果您希望确保返回不可变NSData
,则您的解决方案有效。或者,您可以将commandToSend
的定义更改为:
NSMutableData *commandToSend = [NSMutableData data];
...
return commandToSend;
我更喜欢这个解决方案,因为NSMutableData
是NSData
的子类,所以代码更少,完全没问题。这完全取决于你。