ios - 检测设备信息时潜在的内存泄漏

标签 ios objective-c memory-management memory-leaks

我在下面的代码中遇到了内存泄漏,但我真的不知道如何修复它。我试着让 machine = nil;但这没有用。有人有什么建议吗?提前致谢。

size_t size;
sysctlbyname("hw.machine", NULL, &size, NULL, 0);
char *machine = malloc(size);
sysctlbyname("hw.machine", machine, &size, NULL, 0);
NSString *platform = [NSString stringWithCString:machine encoding:NSUTF8StringEncoding];
if ([platform isEqualToString:@"iPhone3,1"] || [platform isEqualToString:@"iPhone3,2"] || [platform isEqualToString:@"iPhone3,3"] || [platform isEqualToString:@"iPhone4,1"])
            [UINavigationBar appearance].barTintColor = [UIColor colorWithRed:255.0/255.0 green:220.0/255.0 blue:0.0/255.0 alpha:0.9];
machine = nil;

我在 stringWithCSSString:machine 中发现了泄漏:'machine' 指向的潜在内存泄漏

最佳答案

malloc 的调用需要与对 free 的调用配对。

machine = nil 更改为 free(machine)

顺便说一句——你的代码变得更容易了:

#include <sys/utsname.h>

struct utsname si;
uname(&si);
if (strcmp(si.machine, "iPhone3,1") == 0 || strcmp(si.machine, "iPhone3,2") == 0 || strcmp(si.machine, "iPhone3,3") == 0 || strcmp(si.machine, "iPhone4,1") == 0) {
}

不需要内存管理或创建 NSString 对象。

关于ios - 检测设备信息时潜在的内存泄漏,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20085815/

相关文章:

c# - 声明变量是否已经占用内存

ios - UIWebView 上的 Unity3D

iPhone - 如何确定设备的运营商(AT&T、Verizon 等?)

iphone - 程序收到信号 EXC_BAD_ACCESS 访问数组

ios - 无法获取 UITextField 变量

asp.net - 文件下载时出现 System.OutOfMemoryException

ios - 在 Core Data 中为树结构建模

ios - 使 UISearchBar 不像在联系人应用程序中那样滚动

ios - 包含基于 xcode 方案的 header

objective-c - 尝试创建和填充 NSMutableDictionary 时出现内存错误