带有在方法内部创建的指针的 ARC
ARC with pointers created inside methods
我已经了解了 ARC 的概念以及我们如何使用 @property
来定义 strong
或 weak
引用。我的问题是当指针在方法内部时如何定义或释放指针,我希望在范围结束时立即回收内存,例如 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 的所有强引用都丢失时,内存将被释放。所以在范围之外,你的变量内存会自动释放,因为强引用在范围内。
我已经了解了 ARC 的概念以及我们如何使用 @property
来定义 strong
或 weak
引用。我的问题是当指针在方法内部时如何定义或释放指针,我希望在范围结束时立即回收内存,例如 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 的所有强引用都丢失时,内存将被释放。所以在范围之外,你的变量内存会自动释放,因为强引用在范围内。