将WEAK设置为非@property变量

时间:2012-07-05 09:49:19

标签: objective-c ios cocoa-touch automatic-ref-counting weak

需要有ARC知识的人来帮助我。

基本上,我已经在我的班级

中声明了一些变量
@interface Class{
    NSString* one;
    NSString* two;
}

@property(nonatomic,weak) NSString* one;

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

3 个答案:

答案 0 :(得分:5)

可以这样做:

__weak NSString *two;

但在这种情况下,你可能不希望想要

声明实例变量__weak意味着只要某个其他对象拥有引用,对目标对象(在您的情况下为字符串)的引用将存在。当持有强引用的最后一个对象释放字符串时,您的变量two将自动显示nil。当对象持有彼此的引用时,例如在父子层次结构中,这非常有用。由于您的NSString *two无法保留对象的引用,因此使用__weak引用非常值得怀疑。

答案 1 :(得分:0)

你可以这样做而不用担心:

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

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

答案 2 :(得分:0)

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