Objective c ARC中的内存管理
我无法理解这些物体是如何在弧形中释放的,这对我来说仍然是一个困惑 假设我在一个方法中使用alloc创建一个视图控制器或任何其他控件Objective c ARC中的内存管理,objective-c,memory-management,automatic-ref-counting,Objective C,Memory Management,Automatic Ref Counting,我无法理解这些物体是如何在弧形中释放的,这对我来说仍然是一个困惑 假设我在一个方法中使用alloc创建一个视图控制器或任何其他控件 -(void) displayView { RegViewController *sampleView = [[RegViewController alloc] init]; [sampleView setModalTransitionStyle:UIModalTransitionStyleCrossDissolve];
-(void) displayView
{
RegViewController *sampleView = [[RegViewController alloc] init];
[sampleView setModalTransitionStyle:UIModalTransitionStyleCrossDissolve];
[sampleView setModalPresentationStyle:UIModalPresentationFormSheet];
[self presentModalViewController:sampleView animated:YES];
}
它是释放在方法块完成时创建的对象,还是应该通过为引用赋予nil来显式释放?视图控制器在块的末尾自动释放。但是,这并不意味着它被解除分配-它仍然由
presentModalViewController:animated:
方法保留,并将在解除分配时被释放。视图控制器在块结束时自动释放。但是,这并不意味着它被解除分配-它仍然由presentModalViewController:animated:
方法保留,并将在它被解除时被释放(和解除分配)。ARC代表自动引用计数。
它接管了用户维护对象引用计数的责任。
这就是为什么您不能再调用[obj retain]
或[obj release]
。
一旦参考计数器达到0,它就会为您释放它。
请记住,它不是垃圾收集器。如果不小心,这种机制可能会导致内存泄漏。但总的来说,它工作得很好。ARC代表自动参考计数。 它接管了用户维护对象引用计数的责任。 这就是为什么您不能再调用
[obj retain]
或[obj release]
。
一旦参考计数器达到0,它就会为您释放它。
请记住,它不是垃圾收集器。如果不小心,这种机制可能会导致内存泄漏。但一般来说,它工作得很好。在这种情况下,当模式视图被取消时,sampleView将被释放。在这种情况下,不需要执行任何其他操作。在这种情况下,当模式视图被取消时,sampleView将被释放。在这种情况下,不需要做任何其他事情
Does it release the object created when the method block completes or we should explicitly release by giving nil to reference?
答案是否定的
在上述情况下,sampleView
retain count未达到0,因为您将其作为参数传递给了self
class。一旦所有强引用被清除,其保留计数将下降到0,只有在这之后它才会被释放
您可以简单地将代码想象为RegViewController*sampleView=[[[regviewcontrolleralloc]init]autorelease]代码>
答案是否定的
在上述情况下,sampleView
retain count未达到0,因为您将其作为参数传递给了self
class。一旦所有强引用被清除,其保留计数将下降到0,只有在这之后它才会被释放
您可以简单地将代码想象为RegViewController*sampleView=[[[regviewcontrolleralloc]init]autorelease]代码>使用ARC时,当对象超出范围(不再需要)时,编译器将包括对release
方法的必要调用,在一开始,ARC的释放和not ARC应用程序之间没有区别。是范围是ARC唯一关心的问题。使用ARC时,编译器将在对象超出范围(不再需要)时包括对release
方法的必要调用,在一开始,ARC的释放和非ARC应用程序之间没有区别。是的,范围是ARC唯一关心的问题。发现得很好,但在关闭时,它应该消失。如果我们关闭视图控制器,那么它会被释放吗?记住,ARC要释放它,对对象的所有强引用都必须为空。在这种情况下,Disclease方法应该为某个变量置零以释放它。这一点很好,但在Disclease时它应该消失。如果我们关闭视图控制器,那么它会被释放吗?记住,对对象的所有强引用都必须置零,ARC才能释放它。在这种情况下,dismise方法应该使某些变量为null,以便释放它。