gpt4 book ai didi

objective-c - 圆弧 : How to release static variable?

转载 作者:太空狗 更新时间:2023-10-30 03:25:36 27 4
gpt4 key购买 nike

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

最佳答案

是的,因为您没有指定所有权限定符,LLVM 编译器推断 exampleString 具有 __strong 所有权限定符。

这意味着通过在 dealloc 中将 exampleString 设置为 nil,您将保留 nil(新值), 它什么也不做,并释放旧值。

来源

根据 4.4.3. Template arguments 部分的 LLVM documentation on Objective-C Automatic Reference Counting (ARC) , "如果模板类型参数的模板参数是一个可保留的对象所有者类型,它没有明确的所有权限定符,它被调整为具有 __strong 资格。"

并且,根据 4.2. Semantics 部分, "对于__strong对象,首先保留新指针;其次,将左值加载原始语义;第三,将新指针存入原始语义左值;最后,旧指针已发布。这不是原子执行的;面对并发加载和存储时,必须使用外部同步来确保安全。

关于objective-c - 圆弧 : How to release static variable?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7942041/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com