Iphone iOS 5实例变量
对于ARC是如何工作的,我有点困惑,我知道有自动引用计数,但是这个功能即使在分配原始实例变量(不使用属性)时也能工作吗 例如,如果我有一个实例变量Iphone iOS 5实例变量,iphone,ios,ios5,automatic-ref-counting,Iphone,Ios,Ios5,Automatic Ref Counting,对于ARC是如何工作的,我有点困惑,我知道有自动引用计数,但是这个功能即使在分配原始实例变量(不使用属性)时也能工作吗 例如,如果我有一个实例变量arr: @interface TestClass : NSObject { NSArray *arr; } 现在,如果在一个方法中,我使用一个自动发布的NSArray: - (IBAction)test { arr = [NSArray arrayWithObject:@"TEST"]; } 这个数组会发生什么情况?它只是神奇地保
arr
:
@interface TestClass : NSObject {
NSArray *arr;
}
现在,如果在一个方法中,我使用一个自动发布的NSArray
:
- (IBAction)test {
arr = [NSArray arrayWithObject:@"TEST"];
}
这个数组会发生什么情况?它只是神奇地保留它,直到arr
被重新分配给其他对象吗
现在如果我这样做:
self.arr = [NSArray arrayWithObject:@"TEST"];
如果它是强还是弱呢?是的,ARC在原始ivar访问上工作。与局部变量一样,IVAR是隐式的
\uuuuu strong
,除非用\uu弱的或\uu不安全的
修饰。因此,默认情况下,它们的行为将类似于标记为strong
(或retain
,在ARC下是strong
)的属性。我建议阅读苹果的转换为ARC发行说明文档。为了方便起见,Kevin,如果直接访问合成的ivar,则具有copy
语义的@synthesis
d属性会发生什么情况。编译器是否插入副本?@StevenKramer:否。直接访问IVAR总是忽略属性的内存管理语义。唯一重要的是,合成的ivar将获取合成属性的弱/强语义)感谢提供的信息。刚刚在调试器中验证了这一点。我想这是一个有点奇怪但可以理解的选择。