内存泄漏问题

时间:2011-03-25 09:36:06

标签: iphone objective-c xcode memory-leaks

我是iphone dev和处理内存问题的新手。 我正在学习,但有些事情对我来说仍然很神秘。

在下面的例子中,“Instruments”的泄漏分析器说我在databasePath设置中有泄漏。我无法弄清楚原因。

// databaseName and databasePath are properties of my class.
databaseName = [[NSString alloc] initWithString:@"sqlDbName.sql"];

NSArray *documentPaths = [[NSArray alloc] initWithArray:NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES)];

NSString *documentsDir = [[NSString alloc] initWithString:[documentPaths objectAtIndex:0]];

// The problem is here : 
databasePath = [[NSString alloc] initWithString:[documentsDir stringByAppendingPathComponent:databaseName]];

[documentPaths release];
[documentsDir release];

我稍后在dealloc中发布了databaseName和databasePath。

您的帮助将非常感谢!

2 个答案:

答案 0 :(得分:5)

此代码是否有可能执行多次。您已在databasePath中发布dealloc。如果此代码执行多次,则databasePath将因任何连续执行而泄漏。

答案 1 :(得分:1)

如果您确实希望将此方法调用两次,则可以执行以下操作:

...
[databasePath release];
databasePath = [[NSString alloc] initWithString:[documentsDir stringByAppendingPathComponent:databaseName]];
....

如果databasePath最初为零,则[databasePath release];将无效。

如果databasePath已初始化,则会在分配新实例之前释放旧实例。