ios/objective c中的内存泄漏问题

ios/objective c中的内存泄漏问题,ios,objective-c,memory-management,memory-leaks,clang-static-analyzer,Ios,Objective C,Memory Management,Memory Leaks,Clang Static Analyzer,我正在开发ios应用程序,现在想测试它的内存泄漏,我已经使用了 铿锵静态分析仪 它给了我这个错误报告 -(void)pass { printf("reading plist info"); // Path to the plist (in the application bundle) NSString *path = [[NSBundle mainBundle] pathForResource: @"sortednames" ofType:@"plis

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

铿锵静态分析仪

它给了我这个错误报告

-(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];
}
analyzer提供的信息是

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

string_values = [[dict objectForKey:key] **retain**];
您应该合成strong/retain属性,并通过self.string_值分配ivar。 然后您可以释放您的字典,字符串_值仍然有效

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

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


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

您可以直接使用词典的对象。不需要分配。你可以这样使用

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

dict = [NSDictionary dictionaryWithContentsOfFile: 
                         path];

希望它能对您有所帮助。

您为什么要取消注释
[dict release]>当我取消注释它>>时,应用程序崩溃,无法继续使用
自动释放
<代码>NSDictionary*dict=[[[NSDictionary alloc]initWithContentsOfFile:path]autorelease]假设这不是ARC,则需要发布。但是您为
string\u value
指定了一个值,显然是某种全局值,并且该值可能没有被正确保留。(
autorelease
不会有帮助,除非可能是偶然的。)您可以直接使用方法字典WithContentsOfFile吗?我已经回答了。检查我的答案。自动释放或静态分配不会改变问题。问题是将字符串分配到未来的垃圾值中。(又称悬空指针)然后在哪里释放字符串\u值因为字符串\u值是一个ivar或全局变量(我不知道您在代码中声明它的位置),在不再需要它时释放它,或者干脆在dealloc方法中释放它。
NSString *path = [[NSBundle mainBundle] pathForResource:
                  @"sortednames" ofType:@"plist"];

dict = [NSDictionary dictionaryWithContentsOfFile: 
                         path];