Xcode 中的内存管理

Posted

技术标签:

【中文标题】Xcode 中的内存管理【英文标题】:Memory management in Xcode 【发布时间】:2015-07-11 02:48:50 【问题描述】:

我尝试在 Xcode 中分配和释放一个可变数组

NSMutableArray *inventory = [[NSMutableArray alloc] init];

[库存添加对象:@"one"];

[库存放行];

有人帮我解释一下为什么“库存”发布后,它仍然存储 1 个对象吗?

【问题讨论】:

【参考方案1】:

假设您在没有自动引用计数 (ARC) 的情况下工作:

当您释放一个对象时,这会将该对象先前占用的内存标记为空闲。但是,它不一定会立即破坏该记忆中的内容。

如果您尝试(不正确地)访问数组内存地址中的内容,您很可能会发现数组成员仍然存在。但请注意,这是不安全的,数组及其成员可以(并且将)随时被覆盖。

您应该将 ARC 用于任何生产代码,以避免内存管理不善的危险。效果很好。

【讨论】:

没问题!如果你真的想了解 Apple 如何实现 ARC 的细节,我强烈推荐this article。 我们分配一个对象有两个方面:首先,在栈内存中创建一个指向内存地址的指针。其次,声明该内存地址的所有权。在“释放”之后,我们放弃所有权(标记我们不再使用该内存地址的内存)但指针仍然指向该地址内存。这就是为什么“库存”仍然存储 1 个对象

以上是关于Xcode 中的内存管理的主要内容,如果未能解决你的问题,请参考以下文章

iOS 内存管理问题

0219 --xcode 7 解决内存问题

使用Xcode Instruments Leak解决内存泄漏问题

NSDate 内存管理使用 ARC Over Release

iOS基础 ----- 内存管理

转使用Xcode和Instruments调试解决iOS内存泄露