iphone - 如何在不造成内存泄漏的情况下清除自定义对象的 NSMutableArray?

标签 iphone objective-c ios memory-leaks nsmutablearray

如果我有一个自定义对象的 NSMutableArray,我怎样才能轻松清除数组而不引起任何内存问题?假设自定义对象类中有一个 dealloc 方法,它正确地释放了一个实例变量等。

例如,可以使用 NSArray 的“removeAllObjects”方法吗?

  • 如果是 - 这是如何工作的 - “removeAllObjects”在删除每个对象时是否调用每个对象的“dealloc”方法

  • 如果否 - 最简单的使用方法是什么?

编辑(4 次回复后) - 最后一个澄清问题是在回复很好之后 - 我仍然不太确定自定义对象中我已设置为保留的实例变量/属性?这些似乎只能通过我的自定义对象类中的“dealloc”方法释放,我们在其中手动执行此操作以及 [super release]。

因此,如果重新清除数组,如果我执行 removeAllObjects,然后 NSArray 向我的自定义对象发出“释放”,但不调用“dealloc”,那么我的实例变量如何被释放?

最佳答案

removeAllObjects 将从数组中删除对象。此过程将向对象发送释放消息,这将减少其引用计数。当引用计数达到零时,对象将被释放。

不要这样做,因为它会泄漏。

NSObject *object = [[NSObject alloc] init];       + 1
[array addObject:object];                         + 1
[array removeAllObjects];                         - 1
                                                =======
                                                = + 1 -> Leak

正确的做法是:

NSObject *object = [[[NSObject alloc] init] autorelease]; + 1 (from alloc) - 1 (from autorelease)
[array addObject:object];                         + 1
[array removeAllObjects];                         - 1
                                                =======
                                                =   0 -> Object will be deallocated

您可以不调用 removeAllObjects 而只是释放数组。如果一个数组被释放,它里面的所有东西都会被释放,如果没有其他对该对象的引用,它就会被释放。

关于iphone - 如何在不造成内存泄漏的情况下清除自定义对象的 NSMutableArray?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7596648/

相关文章:

iphone - 核心数据 : NSCocoaErrorDomain=134040 Only Occurs On Real Phone, 不是模拟器

iphone - iOS 设备上的传感器融合

ios - 从 Objective C 中的 Json 保存数据的问题

objective-c - Swift 4 将字节转换为 Int 和 ntohl

ios - 自动布局与自动旋转冲突

ios - 自定义 UITableViewCell 样式

android - 移动应用程序中的 Facebook 登录

ios - 当我尝试在 iPhone 中调用时,Swift 2.0 出错

ios - 使用百分比填充 UIView

ios - Xcode12.4 - 带有 xcframework 子项目的 iOS Umbrella xcframework 框架