问题标签 [autorelease]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
3 回答
522 浏览

objective-c - 返回值时在 Objective-C 应用程序中自动释放

我阅读了 Objective-C 语言的内存管理指南,但我仍然有这个疑问,即使在阅读了很多次之后。

假设我想返回一个我刚刚在这样的对象的方法中创建的对象:

我可以这样做,但根据所有权政策是不正确的。该指南指出,正确的解决方案是:

因为,当我自动发布时,我不再是所有者。我的问题是:NSString 什么时候会真正被释放和释放?最后一个初始化的池什么时候释放?这意味着,如果我不创建池,这个对象将在应用程序关闭时释放(xcode 默认创建的池在最后释放)。这个对吗?这同样适用于我未分配的对象,例如:

? 如果我不创建池释放到别处,是在应用程序结束时释放xcode创建的池时释放?感谢您的任何澄清。

0 投票
3 回答
1956 浏览

objective-c - 释放先前释放的对象问题

我有一个函数用于从 csv 文件中读取一行。但我得到了先前释放对象错误的释放,或者有时它是“双重释放”错误。

我尝试根据错误内存地址追踪导致此错误的对象,但我没有这样做。

这是代码:

以下代码显示了我如何使用上面的类:

如果我运行代码并完成 csv 解析,当它尝试释放自动释放池时,应用程序的主要功能会给我双重释放错误。“ * __NSAutoreleaseFreedObject():释放先前释放的对象 (0x6a26050) 被忽略”

NSAutoreleasePool * pool = [[NSAutoreleasePool alloc] init]; int retVal = UIApplicationMain(argc, argv, nil, nil);

有人可以帮我解决这个问题吗?谢谢![池释放];

0 投票
2 回答
1499 浏览

objective-c - 泄漏或崩溃 - 自动释放和释放之间的区别

我有一个理解问题。给出了这个方法:

如果我取消注释release应用程序会崩溃并说它无法访问已发布的对象。
通过 not releaseingresult字符串 Instruments 会报告泄漏 (NSPlaceholderString)。

我可以autorelease在同一行上alloc解决问题(我目前在我的应用程序中这样做)。

如果我理解正确,stringByAppendingString:应该创建一个自动释放的对象,以便可以释放“旧”结果。然后方法arrayWithObject:应该copy将对象放入一个数组中。所以我的想法是在将字符串复制到数组后释放它。

我的知识是否遗漏了什么或有什么问题?

0 投票
4 回答
3195 浏览

iphone - 什么时候发布 UIImage?

我使用以下代码绘制子图像

其中getSubImage定义如下

代码是否正确?

“CGImageRelease”imref 是否安全?

有子“CGImageRetained”imref 吗?

我应该释放 subIm 吗(如果我这样做会出错)?

subIm 是否包含在自动释放池中,如果是,我怎么知道?

一般来说,可以检查一个对象是否包含在自动释放池中(出于调试目的)?

0 投票
2 回答
1690 浏览

ios4 - 按下按钮后必须每秒播放短声时如何释放 AVAudioPlayer 对象

我有以下问题让我发疯。在用户按下按钮后,我的应用程序必须每秒播放指定次数(例如 5 次)的滴答声。

我用这个:

for (int w=1; w<=5; w++) {
[NSThread detachNewThreadSelector:@selector(tic) toTarget:self withObject:nil];
[NSThread sleepForTimeInterval:1.0];
}

在哪里:

- (void)tic {
NSAutoreleasePool *ticPool = [[NSAutoreleasePool alloc] init];
player_tic = [[AVAudioPlayer alloc] initWithContentsOfURL:[NSURL fileURLWithPath: [[NSBundle mainBundle] pathForResource:@"tick" ofType:@"aif"]] error:nil];
[player_tic setDelegate:self];
[player_tic play];
[ticPool drain];
}

和:

- (void) audioPlayerDidFinishPlaying: (AVAudioPlayer *)player_tic successfully:(BOOL)flag {
NSLog(@"Audio finished playing.");
[player_tic release];
}

一切似乎都奏效了。我的问题是对象最后一起释放。
我需要在每次播放声音后立即释放相关的“player_tic”。

其他信息:

以 .m 为单位:
@synthesize player_tic;

在.h中:
@interface myController : UIViewController {
...
AVAudioPlayer *player_tic;
}
@property (nonatomic, retain) AVAudioPlayer *player_tic;

最重要的是,我在编译中有这个警告:
local declaration of 'player_tic' hides instance variable

请帮我!
非常感谢您提前。

——卡罗

0 投票
1 回答
172 浏览

objective-c - Objective-C:内存泄漏与自动释放的多重分配?

如果我做以下事情,这会导致内存泄漏吗?

0 投票
2 回答
126 浏览

iphone - 与 iPhone 自动释放使用相关的问题

有人可以帮助我了解在以下情况下如何完成和处理分配和内存管理。我正在给出一个 Psuedo 代码示例,令我困扰的问题如下内联:

0 投票
3 回答
1691 浏览

objective-c - 目标 C:如何在这种情况下释放代表

我正在使用自定义委托对象在请求完成后执行一些清理任务。ASIHTTPRequest 不保留委托,因此我无法自动释放它们。现在这就是我分配和释放代表的方式。

应用代理

我的委托.m

有一个更好的方法吗?让代表自己释放似乎很难看,Xcode 的构建和分析对我正在做的事情感到不舒服。

0 投票
1 回答
524 浏览

iphone - iPhone & Mailcore 内存泄漏问题

在我目前正在使用的应用程序中,我使用 Mailcore ( http://www.mronge.com/m/MailCore/API/ ) 来处理邮件服务器操作。我试图在后台通过 SMTP 连接发送消息。问题是,Leaks 告诉我,每次发送消息时都会发生相当多的内存泄漏。我试图弄清楚这是我的错还是 Mailcore 的错。这是代码:

从我的视图控制器:

来自我的应用委托:

0 投票
2 回答
1168 浏览

objective-c - 在一个线程中创建并在objective-C中传递给另一个线程的自动释放对象

我有一个对象的方法,它创建对象,然后将其传递给另一个线程中另一个对象的方法,如下所示:

在方法中,我立即保留对象,假设它会被创建者以某种方式释放。我的问题是:如何让 MyClass 正确释放该对象?这是正确的方法吗?

我的解决方案是在方法中手动释放对象。无论如何,我看到泄漏分析器仍然将其识别为泄漏,并且似乎不是 Apple 推荐的,因为所有者有责任释放该对象。

你能解释一下处理这种情况的正确方法吗?谢谢!