six*_*ude 23 memory-management objective-c
我有点困惑的是什么时候在堆上分配事物(我需要释放它们)以及它们在堆栈上分配时(我不需要释放它们).
有经验法则吗?
我认为在C++中,经验法则是如果你使用new它们在堆上的关键字.客观c的规则是什么?如何判断何时在堆栈上分配了什么?
这行代码是否会在堆栈上分配?
NSString *user = @"DEFAULT";
Run Code Online (Sandbox Code Playgroud)
bbu*_*bum 37
在这方面,Objective-C很容易.
或者,至少应该将它们视为堆在堆上.
对于:
NSString *user = @"DEFAULT";
Run Code Online (Sandbox Code Playgroud)
字符串对象在技术上不在堆中,但也可能是.也就是说,它由编译器生成,是应用程序二进制文件的一部分.它不需要保留和释放,因为类(NSCFConstantString,IIRC)会覆盖保留/释放/自动释放以有效地执行任何操作.
至于何时执行和不释放对象,您应该阅读(并重新阅读)Objective-C内存管理指南.
(还有一个例外,但它是一个相当深奥的细节;块在堆栈上开始,你可以将它们阻塞到堆中.块也恰好是Objective-C对象,但很少在使用中暴露.)
ben*_*ado 34
在Objective-C中,很容易:所有对象都在堆上分配.
该规则是,如果你调用一个方法用alloc或new或copy在名称(或调用retain),您拥有的对象,当你用它做,你必须在某一点之后将其释放.有很多关于这个主题的文章.
您给出的示例是一个特例:这是一个静态字符串,我相信它实际上位于程序的数据段(在堆上),但它是静态的,所以您不必担心释放它.
| 归档时间: |
|
| 查看次数: |
15531 次 |
| 最近记录: |