Objective-C中的私有变量是否强大?

sin*_*inθ 7 iphone xcode objective-c private-members automatic-ref-counting

所以搜索Stack Overflow这似乎是如何在Objective-C中创建私有变量:

@interface ClassName()
{
@private
    NSArray* private;
}
@property (strong, nonatomic) NSArray* public;
@end
Run Code Online (Sandbox Code Playgroud)

现在这是我感到困惑的地方.该属性声明为(strong, nonatomic),但私有变量没有任何类型.那么弧怎么知道它是否强大?

Car*_*zey 13

实例变量__strong默认为.

Apple的ARC Transition Guide,关于变量(假定包含实例变量):

__strong是默认值

然后:

对于ARC,实例变量默认是强引用 - 将对象直接分配给实例变量会延长对象的生命周期

这一直持续到该物业连接到ivar via @synthesize.此时,属性的所有权限定符优先.但是,如果您将属性声明为强大的属性,然后手动实现setter和getter,则还必须手动声明支持ivar的所有权限定符.


Mar*_*n R 9

对于属性,属性的所有权隐含了关联实例变量的所有权:

请参阅http://clang.llvm.org/docs/AutomaticReferenceCounting.html:

如果合成了一个属性,则关联的实例变量是实例变量,它可能由@synthesize声明隐式命名.如果关联的实例变量已存在,则其所有权限定必须等于属性的所有权; 否则,将使用该所有权限定创建实例变量.

通常,Objective-C对象默认为strong:

如果使用可保留对象所有者类型声明对象,但没有显式所有权限定符,则会隐式调整其类型以具有__strong限定.

请注意,由于LLVM 4.0编译器(Xcode 4.4),@synthesize语句和关联的实例变量是自动创建的,因此您只需要声明属性.