0

最近,我一直在使用 obj-c 进行 iOS 开发,并且对可以附加到类中的变量的“强”属性感到困惑。

1)首先,在实际意义上,“强”到底是做什么的?

2)我注意到,在构造几个 obj-c 类时,@property (strong) UIImage *pic1, *pic2;如果不想使用属性/合成设置声明变量,则“strong”通常在 @property 上下文中键入(即),是否可以给出这样的变量有“强”属性吗?

4

2 回答 2

2

强引用获取对象的所有权。

当您设置一个强属性时,传递的对象由属性所有者保留,例如[theViewController setString:aString];导致theViewController获取aString. 当属性设置为其他值时,该对象将被释放。

有一个所有权限定符, __strong,它使变量的行为方式与我在上面描述的方式相同。它是任何对象变量的默认值——NSArray * a;是一个强引用,相当于__strong NSArray * a;. 一个区别是,对象不仅会在变量被重新设置时被释放,而且会在它超出范围时被释放,就像在方法结束时一样:

- (void)activate {
    NSArray * a = [NSArray array];
    // a is __strong by default, takes ownership

} // a is going out of scope. To prevent a leak, ARC releases the array
于 2012-05-30T17:38:04.290 回答
1

1) Strong 是 Retain 的 ARC 替代品。基本上,这意味着当给这个属性赋值时,例如[foo setBar: someValue],支持该属性的实例变量将增加传递给bar的参数的保留计数。someValuesetBar

2)我认为你指的是__strong前缀的使用,所以是的。

于 2012-05-30T17:28:30.893 回答