![]() |
1
9
您通常会根据是否要拥有对象超过当前方法的生命周期来选择(例如,将其分配给某个静态的或直接分配给一个IVAR)。在这种情况下,您可以使用alloc/in it方法,因为您知道您想拥有它。如果您计划只在当前方法的范围内使用它,或者打算将它分配给像属性这样的托管对象,那么您可能会使用方便方法。 当你知道你要拥有一个你正在创建的对象时,alloc/init调用总是比方便/保留方式更有效,因为后者基本上需要alloc/init/autorelease对象,然后在返回时保留它。 当您在循环中分配并且不需要/不想处理自动释放池时,也可以使用直接alloc/init方法。 |
![]() |
2
6
数组容量:已经有自动回复了。 initWithCapacity:明确保留,您需要自己释放它。由于您通常称它为[[a alloc]in it…],这将触发一个灯泡“我需要为此管理内存”,除“alloc”之外的其他类似的魔法词是“新的”和“复制”,如您在内存管理指南中所读。但从你的问题来看,你似乎很了解它的原理。 您是正确的,应该保持内存占用的管理和低,但这并不意味着您需要始终执行显式初始化/发布。正如尼克所说,使用autorelease-factory方法的一个用例是将它们作为参数传递。 另一个例子是,当您向集合(如nsdictionary或nsarray)添加某些内容时,可以使用autorelease factory方法创建“something”,因为集合“接管”了它。(添加到集合时保留内容,删除时释放。) 你可以争辩说
只是比类型更干净
在第一种情况下,您根本不需要担心发布调用。缺点是,在同一个runloop中多次执行此操作时,如果第一个case是在runloop末尾消失的临时/一次性数组对象,则它的内存占用会更大。但是,如果它是一个小对象,而不是在一个循环中完成,并且像通常情况那样保留更长的时间,那么它们的足迹是相同的。 |
![]() |
3
0
在这种情况下,我尝试遵循以下规则来避免内存相关(= =“非常讨厌”)错误:
|
![]() |
TheKing · 为什么数组的地址可以有负值? 3 年前 |
![]() |
yurnero · MATLAB:“加载”一个快速访问功能 7 年前 |
![]() |
joe · 一页可以同时在两个工作集中吗? 7 年前 |
![]() |
Jaques · “.exe”已触发断点 7 年前 |
![]() |
adn bps · 在函数中修改变量的高效内存方法 7 年前 |
![]() |
Gauraang Khurana · C语言中分段错误的不稳定行为 7 年前 |
![]() |
Rajesh K · 如何查找设备中存在的广告垃圾? 7 年前 |