Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/objective-c/25.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
Objective c 使用ARC时重新指定特性_Objective C_Ios_Cocoa Touch_Memory Management_Automatic Ref Counting - Fatal编程技术网

Objective c 使用ARC时重新指定特性

Objective c 使用ARC时重新指定特性,objective-c,ios,cocoa-touch,memory-management,automatic-ref-counting,Objective C,Ios,Cocoa Touch,Memory Management,Automatic Ref Counting,我有一个带有各种控件的窗体。其中一个控件允许用户通过点击控件后显示的模式视图更改提交表单的类别。当用户选择更改表单的类别时,表单需要基于新类别重新显示控件 除了从窗体的视图中删除以前的控件外,对于正在丢弃的控件,我还需要担心什么?考虑表单实现的以下方法: - (void)showControls self.controls = [NSMutableArray array]; for(UIControl *control in self.dataSource.controls){

我有一个带有各种控件的窗体。其中一个控件允许用户通过点击控件后显示的模式视图更改提交表单的类别。当用户选择更改表单的类别时,表单需要基于新类别重新显示控件

除了从窗体的视图中删除以前的控件外,对于正在丢弃的控件,我还需要担心什么?考虑表单实现的以下方法:

- (void)showControls
    self.controls = [NSMutableArray array];

    for(UIControl *control in self.dataSource.controls){
        [self.controls addObject:control];
        [self.view addSubview:control];
    }
}

如果我多次调用此方法(因为用户更改了表单类别,如前所述),我假设它会导致各种NSMutableArray四处浮动,而没有任何引用它们的指针。这样可以吗?我正在使用ARC,所以它会自动收集那些“丢失”的阵列吗?

ARC不会“收集”任何东西。而且,你在那里所做的与使用ARC是完全无关的。您正在使用
控件的setter
属性,其工作方式与预弧相同。它将释放旧值并保留新值。因此,数组“丢失”不应该有任何问题,除非您对
self.controls
执行了一些奇怪的操作,而不是您所显示的操作。

ARC不会“收集”任何东西。而且,你在那里所做的与使用ARC是完全无关的。您正在使用
控件的setter
属性,其工作方式与预弧相同。它将释放旧值并保留新值。所以,数组“丢失”不应该有任何问题,除非你对
self.controls
做了一些奇怪的事情,而不是你刚才所展示的。

我在文章的结尾说错了。我所说的“收集”是指垃圾收集器。如果我没有通过setter访问
控件
,而是直接重新分配给属性(即
控件=[NSMutableArray]
),该怎么办?如果没有ARC,这肯定会导致内存泄漏,但是有ARC怎么办?没有ARC的垃圾收集器-抱歉,我不太明白您关于收集的意思。你说的是,不使用ARC直接访问ivar确实可能会泄漏或无法正确保留,但使用ARC不会发生这种情况。很抱歉,我的术语不适用。我只是想弄清楚,在使用ARC和直接赋值时,这些对象是否会被正确释放。这个问题已经得到了回答。谢谢我在帖子的末尾说错话了。我所说的“收集”是指垃圾收集器。如果我没有通过setter访问
控件
,而是直接重新分配给属性(即
控件=[NSMutableArray]
),该怎么办?如果没有ARC,这肯定会导致内存泄漏,但是有ARC怎么办?没有ARC的垃圾收集器-抱歉,我不太明白您关于收集的意思。你说的是,不使用ARC直接访问ivar确实可能会泄漏或无法正确保留,但使用ARC不会发生这种情况。很抱歉,我的术语不适用。我只是想弄清楚,在使用ARC和直接赋值时,这些对象是否会被正确释放。这个问题已经得到了回答。谢谢