ARC在方法内创建指针

时间:2015-04-12 09:24:43

标签: ios objective-c memory-management automatic-ref-counting

我已经了解了ARC的概念以及我们如何使用@property来定义strongweak引用。我的问题是当它们在方法内部时如何定义或释放指针,并且我希望在范围结束时尽快回收内存,例如

    - (void) SomeMethod {
     NSString* databasePath = [[NSString alloc] initWithString: [docsDir stringByAppendingPathComponent: @"contacts.db"]];
     ....
     ....
    }

我的问题是如何释放字符串databasePath

2 个答案:

答案 0 :(得分:2)

声明局部变量时,默认情况下会标记为强引用。当所有对var的强引用都丢失时,内存将被释放。因此在外部范围内,您的变量内存会自动释放,因为强引用位于范围内。

答案 1 :(得分:1)

除非某些....代码在实例变量中存储databasePath,否则只要您将nil分配给databasePath,就会回收字符串的内存,或者让变量超出范围。您不需要为此做任何特殊操作,因为您使用了alloc / init

故事与自动释放的物体略有不同,即

NSString* databasePath = [NSString stringWithString: [docsDir stringByAppendingPathComponent: @"contacts.db"]];

此字符串将保持不变,直到运行循环减少其引用计数,除非您在单独的自动释放池中创建它。因此,简单地将databasePath设置为nil不再足以立即释放内存:您需要在变量周围放置一个自动释放池,以便立即释放内存。