2

需要了解 ARC 的人来帮助我。

基本上,我已经在我的班级中声明了一些变量

@interface Class{
    NSString* one;
    NSString* two;
}

@property(nonatomic,weak) NSString* one;

如您所见,我可以将弱标识符设置为NSString* one. 但是,我不需要 getter/setter/synthesizer,NSString* two因为它只是一个公共变量。如何为其设置weak标签以便释放内存?还是自动设置?

4

3 回答 3

5

可以这样做:

__weak NSString *two;

但在这种情况下,您可能不想这样做。

声明一个实例变量__weak意味着对目标对象的引用(在你的例子中是一个字符串)只有在其他对象持有引用时才会存在。当最后一个持有强引用的对象释放字符串时,您的变量twonil自动退出。这在对象持有彼此的引用时非常有用,例如在父子层次结构中。由于您NSString *two不可能持有对您的对象的引用,因此使用该__weak引用是非常值得怀疑的。

于 2012-07-05T10:07:22.823 回答
0

您可以这样做而不必担心:

NSString* two = [[NSString alloc] init];

当您的类实例Class由于某种原因被释放时,因为是唯一一个(理论上)引用two,它将被释放。

于 2012-07-05T09:55:05.113 回答
0

我的建议(虽然我可能错了,但我认为 Apple 的建议)是养成始终为 iVar 使用属性的习惯,然后这个问题就消失了。

于 2012-07-05T10:06:31.827 回答