0

我正在开发 ios 应用程序,现在想测试它是否存在内存泄漏,我使用了

clang 静态分析器

它给了我这个错误报告

-(void)pass
{
printf("reading plist info");   
// Path to the plist (in the application bundle)
NSString *path = [[NSBundle mainBundle] pathForResource:
                  @"sortednames" ofType:@"plist"];

// Build the array from the plist  
NSDictionary *dict = [[NSDictionary alloc] initWithContentsOfFile:path];

for (id key in dict) {
    NSLog(@"bundle: key=%@, value=%@", key, [dict objectForKey:key]);
    string_values=[dict objectForKey:key];
    //NSLog(@"bundle data: key=%@, value=%@", key, [string_values objectAtIndex:0]);
}
//[dict release];
}

分析器提供的信息是 我现在做什么???

还有一件事对于我的应用程序的内存管理是否足够????
或者我必须做更多的任务???
感谢您的回复

4

2 回答 2

2
string_values = [[dict objectForKey:key] **retain**];

您应该合成一个强/保留属性并通过 self.string_values 分配您的 ivar。然后您可以释放您的字典,并且 string_value 仍然有效。

...
@property(nonatomic, retain)NSString* string_value;
...
@synthetyse string_value;
...

然后

self.string_values = [dict objectForKey:key];

不,静态分析器不是内存泄漏的防弹工具。它可以在算法上找到计算时间的泄漏,但不能找到运行时的泄漏。这就是为什么它被称为静态分析器。但顺便说一句,它真的很有帮助!

然后,您可以分析您的应用程序并使用泄漏工具来检查其他泄漏。

于 2013-02-27T12:45:07.800 回答
0

你可以直接使用 NSDictionary 的对象。无需分配。你可以像这样使用。

NSString *path = [[NSBundle mainBundle] pathForResource:
                  @"sortednames" ofType:@"plist"];

dict = [NSDictionary dictionaryWithContentsOfFile: 
                         path];

希望它会帮助你。

于 2013-02-27T12:45:17.893 回答