最近,我一直在使用 obj-c 进行 iOS 开发,并且对可以附加到类中的变量的“强”属性感到困惑。
1)首先,在实际意义上,“强”到底是做什么的?
2)我注意到,在构造几个 obj-c 类时,@property (strong) UIImage *pic1, *pic2;
如果不想使用属性/合成设置声明变量,则“strong”通常在 @property 上下文中键入(即),是否可以给出这样的变量有“强”属性吗?
最近,我一直在使用 obj-c 进行 iOS 开发,并且对可以附加到类中的变量的“强”属性感到困惑。
1)首先,在实际意义上,“强”到底是做什么的?
2)我注意到,在构造几个 obj-c 类时,@property (strong) UIImage *pic1, *pic2;
如果不想使用属性/合成设置声明变量,则“strong”通常在 @property 上下文中键入(即),是否可以给出这样的变量有“强”属性吗?
强引用获取对象的所有权。
当您设置一个强属性时,传递的对象由属性所有者保留,例如[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
1) Strong 是 Retain 的 ARC 替代品。基本上,这意味着当给这个属性赋值时,例如[foo setBar: someValue]
,支持该属性的实例变量将增加传递给bar
的参数的保留计数。someValue
setBar
2)我认为你指的是__strong
前缀的使用,所以是的。