Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/iphone/42.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Iphone iOS 5实例变量_Iphone_Ios_Ios5_Automatic Ref Counting - Fatal编程技术网

Iphone iOS 5实例变量

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"]; } 这个数组会发生什么情况?它只是神奇地保

对于ARC是如何工作的,我有点困惑,我知道有自动引用计数,但是这个功能即使在分配原始实例变量(不使用属性)时也能工作吗

例如,如果我有一个实例变量
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将获取合成属性的弱/强语义)感谢提供的信息。刚刚在调试器中验证了这一点。我想这是一个有点奇怪但可以理解的选择。