您的位置:首页 > 移动开发 > IOS开发

iOS开发使用 runtime 方法中的 class_copyIvarList,class_copyMethodList 方法时导致内存泄漏问题

2018-04-10 15:54 585 查看
前段时间在做公司新项目的时候使用了 runtime 的 class_copyIvarList 方法来获取类的所有属性的时候,用 leaks 检测,发现这里出现了内存泄漏。后来查了一些资料发现 class_copyIvarList 返回的对象需要手动释放。因为这些是C实现的函数,需要手动对函数返回值进行 free。具体看代码:
- (void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender{
Class viewControllerClass = NSClassFromString((NSString *)sender);
if ([segue.destinationViewController isKindOfClass:viewControllerClass]) {
if (_param) {
id objec = segue.destinationViewController;
unsigned int count = 0;
Ivar *ivarList = class_copyIvarList(viewControllerClass, &count);
for (int i = 0; i < count; i ++) {
Ivar ivar = ivarList[i];
NSString *ivarName = [NSString stringWithUTF8String:ivar_getName(ivar)];
ivarName = [ivarName substringFromIndex:1];
id value = _param[ivarName];
if (value) {
[objec setValue:value forKey:ivarName];
}
}
free(ivarList);
}
}
}
另外,class_copyMethodList 方法返回的值也需要手动释放。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐