我有下一个用于将NSMutableString对象转换为NSData对象的代码:
-(NSData *)desSerializarFirma:(NSMutableString *)firma{
NSArray *arregloBits = [firma componentsSeparatedByString:@","];
unsigned c = arregloBits.count;
uint8_t *bytes = malloc(sizeof(*bytes) * c);
unsigned i;
for (i = 0; i < c; i ++)
{
NSString *str = [arregloBits objectAtIndex:i];
int byte = [str intValue];
bytes[i] = (uint8_t)byte;
}
return [NSData dataWithBytes:bytes length:c];
}
当我用xCode分析它时,它说
memory is never released; potential leak of memory pointed to by 'bytes'
这句话指向我代码的最后一行:
return [NSData dataWithBytes:bytes length:c];
如果我通过执行'free(bytes)'释放对象,那么我的功能无用......任何帮助我都会感激
答案 0 :(得分:7)
你需要free
个字节,因为NSData
没有得到它的所有权:它无法知道数组是临时的还是动态的,所以它会复制它。
要解决此问题,请替换
return [NSData dataWithBytes:bytes length:c];
与
NSData *res = [NSData dataWithBytes:bytes length:c];
free(bytes);
return res;
答案 1 :(得分:0)
替换
return [NSData dataWithBytes:bytes length:c];
使用
return [NSData dataWithBytesNoCopy:bytes length:c];
然后NSData
拥有字节的所有权,并将为您释放它们。