带有在方法内部创建的指针的 ARC

ARC with pointers created inside methods

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

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

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

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

自动释放对象的情况略有不同,即

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

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

当你声明一个局部变量时,它默认标记为强引用。当对 var 的所有强引用都丢失时,内存将被释放。所以在范围之外,你的变量内存会自动释放,因为强引用在范围内。