Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/objective-c/22.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_Xcode_Automatic Ref Counting - Fatal编程技术网

Objective c 使用ARC,我是否需要手动管理内存?

Objective c 使用ARC,我是否需要手动管理内存?,objective-c,xcode,automatic-ref-counting,Objective C,Xcode,Automatic Ref Counting,我的问题基本上是标题。在启用自动引用计数的XCode中,我是否需要手动管理内存?比如调用release、retain等 谢谢 圆弧仅处理Objective-C对象。因此,您需要手动继续管理核心基础和普通C内存。 虽然您不需要手动保留或释放,但您仍然负责防止保留周期-确保将适当的属性标记为强属性和弱属性。所以你需要继续考虑至少这方面的所有权。 除此之外,至少还有一个非常特殊的怪癖——如果堆栈要在它们下面展开,您需要记住复制块。这是为了确保它们最终位于堆而不是堆栈上,因此与内存管理相关。ARC只处理

我的问题基本上是标题。在启用自动引用计数的XCode中,我是否需要手动管理内存?比如调用release、retain等


谢谢

圆弧仅处理Objective-C对象。因此,您需要手动继续管理核心基础和普通C内存。

虽然您不需要手动保留或释放,但您仍然负责防止保留周期-确保将适当的属性标记为强属性和弱属性。所以你需要继续考虑至少这方面的所有权。


除此之外,至少还有一个非常特殊的怪癖——如果堆栈要在它们下面展开,您需要记住复制块。这是为了确保它们最终位于堆而不是堆栈上,因此与内存管理相关。

ARC只处理Objective-C对象。因此,您需要手动继续管理核心基础和普通C内存。

虽然您不需要手动保留或释放,但您仍然负责防止保留周期-确保将适当的属性标记为强属性和弱属性。所以你需要继续考虑至少这方面的所有权。


除此之外,至少还有一个非常特殊的怪癖——如果堆栈要在它们下面展开,您需要记住复制块。这是为了确保它们最终在堆上而不是堆栈上,因此与内存管理相关。

在ARC中,您不必担心释放内存。但请注意,对象在使用时不会被释放。@Prince:对象何时释放?@Surfbutler在将来的任意时间点。它将是确定性的,但从语法上看不是显式的,除了隐式提供生命周期上限。所以像Guard Malloc和Zombies这样的东西应该能够可靠地捕获问题,性能应该是可预测的,但是编写假定何时发布的代码是个坏主意——尽管出于各种原因,这一直是个坏主意。如果您需要明确地告诉某人何时停止做某事,请遵循NSTimer模式和“无效类型”步骤。在ARC中,您不必担心释放内存。但请注意,对象在使用时不会被释放。@Prince:对象何时释放?@Surfbutler在将来的任意时间点。它将是确定性的,但从语法上看不是显式的,除了隐式提供生命周期上限。所以像Guard Malloc和Zombies这样的东西应该能够可靠地捕获问题,性能应该是可预测的,但是编写假定何时发布的代码是个坏主意——尽管出于各种原因,这一直是个坏主意。如果您需要明确地告诉某人何时停止执行某项操作,请遵循NSTimer模式并执行“无效类型”步骤。在某些情况下,如将块分配给属性或从函数返回块,块会自动复制,但我不相信它。我认为它们在被其他块捕获时也会被复制,所以这是99%的实际用例,但我还没有找到任何可引用的引用,例如,将一个作为对象传递给performSelector:…afterDelay:将是安全的。不,只是随意将一个块作为对象传递给另一个函数是不安全的,让我解释一下原因:当块被传递到一个已经复制了对象(例如属性)的函数中时,它们会自动被复制,但它们不会像普通对象那样被保留。因此,虽然我可能对一个块有一个强引用,但除非该块在堆上,否则这没有任何意义。当指定给任意类型id时,块不会被复制,因为ARC不知道要使用“复制”还是“保留”,这仅在已复制块时有效。块非常容易混淆。在某些情况下,如将块指定给属性或从函数返回块,块会自动复制,但我不相信它。我认为它们在被其他块捕获时也会被复制,所以这是99%的实际用例,但我还没有找到任何可引用的引用,例如,将一个作为对象传递给performSelector:…afterDelay:将是安全的。不,只是随意将一个块作为对象传递给另一个函数是不安全的,让我解释一下原因:当块被传递到一个已经复制了对象(例如属性)的函数中时,它们会自动被复制,但它们不会像普通对象那样被保留。因此,虽然我可能对一个块有一个强引用,但除非该块在堆上,否则这没有任何意义。当指定给任意类型id时,块不会被复制,因为ARC不知道要使用“复制”还是“保留”,这仅在已复制块时有效。积木很容易混淆。