【发布时间】:2011-12-18 00:40:17
【问题描述】:
dealloc(下)会释放静态变量exampleString指向的NSString吗?
// ExampleClass.h
@interface ExampleClass : NSObject
@end
// ExampleClass.m
static NSString *exampleString;
@implementation ExampleClass
- (void)dealloc {
exampleString = nil;
}
- (id)init {
self = [super init];
if (self) {
exampleString = [NSString stringWithFormat:@"example %@", @"format"];
}
return self;
}
@end
【问题讨论】:
-
这是一个奇怪的例子。首先,您的代码中使用的
static并不表示存储持续时间,而是表示可见性(链接)。其次,看起来您要么想要类方法而不是实例方法,要么exampleString应该是一个实例变量。你到底想完成什么? -
@Bavarious,你是对的。这是一个奇怪的例子。如果你给我举一个更好的例子。我实际上并没有这样做。随意编辑它。
-
我不确定,@Matt。如果将代码修改为使用类方法,则不需要
-dealloc。如果代码被修改为使用实例变量,那么 ARC 会负责释放它。此外,static并没有真正影响代码,因为它的功能是限制该变量与 ExampleClass.m 的可见性/链接——如果删除了static,内存管理将是相同的。
标签: objective-c automatic-ref-counting static-variables