【发布时间】:2009-10-15 18:27:52
【问题描述】:
别开枪,我知道这肯定被问了一千遍了……
我对缺少关于 Objective-C 内存的良好文档感到不舒服。我理解 alloc、dealloc、retain、release 以及所有这些,但我的脑海中留下了一些混乱。
这只是懒惰的编程还是 Objective-C 在分配内存方面做了一些“幕后”的自动活动?
来自 C 背景(几个世纪前),我知道指针只是指针......您还必须为指针指向的内容保留空间,否则您将开始踩踏您自己的程序和其他变量。
我找到的代码示例(并且在我阅读的书中 - 所有这些都与当前版本的 XCode 和 Interface Builder 过时)似乎从未为某些对象分配存储空间,例如 NSString。他们声明一个指针(例如 NSString *aString;)然后开始为字符串分配文本。每次调用都没有为字符串分配内存!?!?那么所有这些示例都只是寻找崩溃位置的懒惰代码吗?
此外,书籍还谈到了声明“池”内存以及它会自动插入到您的代码中。当我创建项目、类和对象时,在任何地方都找不到这样的代码。 Apple 是否取消了这种自动插入,还是在编译期间发生了这种情况?
是否有倒数第二本可以一劳永逸地解释这一切的参考书或网站?
【问题讨论】:
-
如果您查看 main.m,您会注意到 main 函数中的所有内容都已放入自动释放池中......并且池不是“内存池”。取而代之的是,将其视为一个列表,该列表跟踪一组标记为以后释放的对象。当池被耗尽时,通过 [pool drain],检查池中每个对象的保留值,如果没有保留它们并设置为自动释放,则该对象被销毁。
标签: objective-c memory-management