我是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。
您的帮助将非常感谢!
答案 0 :(得分:5)
此代码是否有可能执行多次。您已在databasePath
中发布dealloc
。如果此代码执行多次,则databasePath
将因任何连续执行而泄漏。
答案 1 :(得分:1)
如果您确实希望将此方法调用两次,则可以执行以下操作:
...
[databasePath release];
databasePath = [[NSString alloc] initWithString:[documentsDir stringByAppendingPathComponent:databaseName]];
....
如果databasePath
最初为零,则[databasePath release];
将无效。
如果databasePath
已初始化,则会在分配新实例之前释放旧实例。