如何在iOS中正确释放内存:永远不会释放内存;潜在的内存泄漏指向
发布时间:2020-12-14 17:12:36 所属栏目:百科 来源:网络整理
导读:我有下一个代码,用于将NSMutableString对象转换为NSData对象: -(NSData *)desSerializarFirma:(NSMutableString *)firma{ NSArray *arregloBits = [firma componentsSeparatedByString:@","]; unsigned c = arregloBits.count; uint8_t *bytes = malloc(siz
我有下一个代码,用于将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)’释放对象,那么我的功能无用……任何帮助我都会感激 解决方法
你需要释放字节,因为NSData没有获得它的所有权:它无法知道数组是临时的还是动态的,因此它会复制它.
要解决此问题,请替换 return [NSData dataWithBytes:bytes length:c]; 同 NSData *res = [NSData dataWithBytes:bytes length:c]; free(bytes); return res; (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |