我已经了解了ARC的概念以及我们如何使用@property
来定义strong
或weak
引用。我的问题是当它们在方法内部时如何定义或释放指针,并且我希望在范围结束时尽快回收内存,例如
- (void) SomeMethod {
NSString* databasePath = [[NSString alloc] initWithString: [docsDir stringByAppendingPathComponent: @"contacts.db"]];
....
....
}
我的问题是如何释放字符串databasePath
?
答案 0 :(得分:2)
声明局部变量时,默认情况下会标记为强引用。当所有对var的强引用都丢失时,内存将被释放。因此在外部范围内,您的变量内存会自动释放,因为强引用位于范围内。
答案 1 :(得分:1)
除非某些....
代码在实例变量中存储databasePath
,否则只要您将nil
分配给databasePath
,就会回收字符串的内存,或者让变量超出范围。您不需要为此做任何特殊操作,因为您使用了alloc / init
。
故事与自动释放的物体略有不同,即
NSString* databasePath = [NSString stringWithString: [docsDir stringByAppendingPathComponent: @"contacts.db"]];
此字符串将保持不变,直到运行循环减少其引用计数,除非您在单独的自动释放池中创建它。因此,简单地将databasePath
设置为nil
不再足以立即释放内存:您需要在变量周围放置一个自动释放池,以便立即释放内存。