在 Stack Overflow 上搜索,这似乎是在 Objective-C 中创建私有变量的方法:
@interface ClassName()
{
@private
NSArray* private;
}
@property (strong, nonatomic) NSArray* public;
@end
现在这就是我困惑的地方。该属性声明为(strong,nonatomic),但私有变量并没有这样的声明。那么,ARC 如何知道它是否是 strong 的?
在 Stack Overflow 上搜索,这似乎是在 Objective-C 中创建私有变量的方法:
@interface ClassName()
{
@private
NSArray* private;
}
@property (strong, nonatomic) NSArray* public;
@end
实例变量默认情况下是__strong。
引用自苹果的 ARC 过渡指南,关于变量(假定包括实例变量):
__strong 是默认值
稍后又写道:
使用 ARC,实例变量默认为强引用——将对象直接赋给实例变量确实会延长对象的生命周期
在通过@synthesize
将属性连接到 ivar 之前,这个规则一直有效。此时,属性的所有权限定符会优先起作用。但是,如果你将属性声明为除了 strong 以外的任何类型,然后手动实现设置器和访问器,你就必须手动声明备份 ivar 的所有权限定符。
@property
中的修饰符指定了生成的setter和其他ARC插入代码的行为。变量本身并不是强或弱的,它们只是内存位置。所以你现在编码的是强引用。
将其声明为强引用私有变量的方法是在.m文件内部的类别中声明其为strong。
// .h
// nothing
// .m
@interface ClassName()
@property (strong, nonatomic) NSArray* myStrongPrivateProperty;
@end
// that's it
@property
。 - BJ Homer