ma1*_*w28 10 objective-c static-variables automatic-ref-counting
Will dealloc(下面)释放NSString静态变量指向的exampleString?
// 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
Run Code Online (Sandbox Code Playgroud)
ma1*_*w28 20
是的,因为您没有指定所有权限定符,LLVM编译器会推断出exampleString具有__strong所有权限定条件.
这意味着通过设置exampleString为nilin dealloc,您将保留nil(新值),它不执行任何操作,并释放旧值.
根据第4.4.3节.模板参数的的上的Objective-C自动参考LLVM文档计数(ARC),"如果一个模板类型参数的模板的说法是,没有一个明确的所有权限定符的保留性对象所有者类型,将其调整为具有__strong资格."
并且,根据第4.2节.语义,"对于__strong对象,首先保留新的指针;其次,左值加载原始语义;第三,新的指针被存储到具有原始语义的左值;最后,旧的指针被释放.这不被执行.原子地;必须使用外部同步,以便在并发加载和存储时使其安全.
| 归档时间: |
|
| 查看次数: |
5157 次 |
| 最近记录: |