首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Dealloc和ARC

Dealloc和ARC
EN

Stack Overflow用户
提问于 2014-01-15 02:21:44
回答 3查看 574关注 0票数 0

我读到在Xcode的Objective-C编程中使用ARC时,编译器会自动调用dealloc方法。在什么情况下才叫它呢?

为了避免有太多的变量名,当我需要重复使用相同的类来执行多个操作(并且每次都要重置变量)时,我通常会声明变量,将它们设置为nil,然后在执行过程中为它们赋值。结果如下所示:

代码语言:javascript
复制
MyClass mc;

mc = [[MyClass alloc] init];
[mc doThis:someOption]

mc = [[MyClass alloc] init];
[mc doThis:someOtherOption];

//etc...

方法名alloc是“allocated”的缩写,因为它是为变量分配内存的方法。每次我给sc赋值时,编译器会自动释放它的内存吗?我计划在我的一个项目中使用这种方法,我不希望每次调用allocmc分配一个新值时都会分配大量内存。

EN

回答 3

Stack Overflow用户

发布于 2014-01-15 02:25:31

编译器从不调用dealloc。编译器根据需要插入retainreleaseautorelease (实际上是更有效的等价物),以遵循内存管理规则。

当编译器插入时,这些调用由编译器决定,细节将在不同的编译器版本和不同的优化级别上改变。

也就是说,你一般不需要担心这个问题。

然而,自动释放压力仍然是一个问题,因为可以保留周期。因此,你绝对应该用分配工具来戳你的应用程序,既要测量高水位线,又要确保你的应用程序不会随着时间的推移而泄漏内存。

票数 5
EN

Stack Overflow用户

发布于 2014-01-15 02:42:43

我读到在Xcode的Objective-C编程中使用ARC时,dealloc方法是自动调用的

在Objective-C中,无论是否使用ARC,都不会直接调用-dealloc

在什么情况下会调用

当对象的保留计数降为零时,将调用-dealloc。也就是说,当先前断言对象的“所有权”(通过调用+alloc-retain-copy+new)的所有对象都放弃了该所有权(通过调用-release-autorelease)时,就会调用该方法。

每次我给sc赋值时,编译器会自动释放sc的内存吗?

如果你正在使用ARC (你应该这样做),编译器将插入对-retain-release等的适当调用,以便对内存进行适当的管理。也就是说,您仍然需要了解内存管理是如何工作的,并且应该熟悉中的内容。

票数 0
EN

Stack Overflow用户

发布于 2014-01-15 02:44:11

也就是说,你最好用Instruments来运行你的应用程序,看看你的应用程序在这个过程中使用了多少内存。你的实例不应该被自动释放,所以你不必担心它们会一直存在,直到自动释放池被耗尽,但是我不知道当你初始化一个类的实例时,你可能会做什么,或者你可能会在你的doThis:方法中做什么,所以如果你关心的话,用Instruments分析它的内存分配和泄漏总是一个好主意。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/21121032

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档