我读到在Xcode中使用ARC进行Objective-C编程时,dealloc
编译器会自动调用该方法.在什么情况下它被称为?
为了避免使用太多的变量名,当我需要重复使用相同的类来执行多个操作(并且每次都重置变量)时,我经常声明变量,将它们设置为nil
,然后在我去的时候为它们赋值.最终看起来像这样:
MyClass mc; mc = [[MyClass alloc] init]; [mc doThis:someOption] mc = [[MyClass alloc] init]; [mc doThis:someOtherOption]; //etc...
方法名称alloc
是"allocate"的缩写,因为它是将内存分配给变量的方法.sc
每次为其分配新值时,编译器是否会自动释放内存?我计划在我的一个项目中使用这个方法,并且我不希望在我调用的所有时间分配大量内存alloc
来分配新值mc
.
编译器从不调用dealloc
.编译器插入retain
,release
并autorelease
在必要时(更高效的等同物,真的)遵循内存管理规则.
当编译器插入所述调用由编译器决定时,细节将在不同的编译器版本和不同的优化级别之间发生变化.
也就是说,你一般不需要担心它.
然而,自动释放压力可能仍然是一个问题,因为可以保留周期.因此,您绝对应该使用Allocations Instrument来调整您的应用程序以测量高水位线,并确保您的应用程序不会随着时间的推移而泄漏内存.