iphone - 为什么在[NSMutableArray array]之后需要此自动释放功能以避免内存泄漏?

标签 iphone ios memory-management nsmutablearray autorelease

为什么在[NSMutableArray array]之后需要此自动释放功能以避免内存泄漏?

那是Instruments告诉我的,那里有泄漏。通过将自动发布放入其中,可以解决该问题,但是我不确定为什么需要这样做。 “数组”方法不像INIT或COPY等...

@interface Weekend : NSObject {
    NSMutableArray*     _events;     
}
@property (nonatomic, retain) NSMutableArray* events;
@end

@implementation Weekend

@synthesize events = _events;

- (id)init {
    if (self == [super init])
    {
        self.events = [[NSMutableArray array] autorelease];    // WHY IS THIS AUTORELEASE REQUIRED
    }
    return self;
}

- (void) dealloc {
    [_events release];  _events = nil;
    [super dealloc];
}

@end

注意:这是当我将自动释放出(并且将“if(self == [super init])”)更改为“if((self = [super init]))”后在仪器中看到的
#  Category     Event        Code Location
0  __NSArrayM   Malloc       at the [NSMutableArray array] point
1  __NSArrayM   Autorelease  at the [NSMutableArray array] point
2  __NSArrayM   Retain       at the @synthesize events = _events; point of the code
3  __NSArrayM   Release      QuartzCore - CA:Transaction::observer_callback(__CF........)
                             (from main.m:14 - "int retVal = UIApplicationMain(argc, argv, nil, nil);")

最佳答案

为什么需要额外的发行版?你不知道反正不在那里。

问题是您在其他地方过度保留了_events。也许您正在将其传递给另一个未发布的保留类?泄漏始终是Instruments归因于对象创建的,而不是不平衡保留的

添加该自动释放而不是查找不平衡的保留,相当于内存管理的答案偏离了0.3,而只需添加0.3即可解决。您需要删除它并解决实际问题。

编辑:阅读最新的编辑后,我认为您可能会发现Weekend本身已泄漏。

关于iphone - 为什么在[NSMutableArray array]之后需要此自动释放功能以避免内存泄漏?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6221638/

相关文章:

ios - 我的 UITextView 文本在编辑后跳转到右边(快速)

iphone - Collection <NSCFSet : 0x1b0b30> was mutated while being enumerated. 如何判断是哪个集合?

iphone - 您使用 "potential leak"版本避免 "distant"警告的习惯用法?

iphone - 从多任务栏中删除应用程序

iphone - 如何在同一个 UITextField 或 UITextView 中保留两种不同的字体?

ios - 在 Swift 中将数字四舍五入到小数点后两位

ios - 我收到以下错误 "appium &"command not found on MAC

ios - 为什么 Firebase Auth Signin 和登录 segue 被调用两次

memory-management - 内核模块,在从一个进程调用时,从另一个进程写入页面

java - 在 Java 中查找内存使用情况