问题标签 [nsautoreleasepool]

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 投票
4 回答
3052 浏览

c++ - 在没有 Objective-C 的情况下使用 Apple 自动释放池

我正在开发一个需要在 Linux、Windows 和 Mac OS X 上运行的应用程序。为此,我将 C++ 与 Qt 一起使用。

出于多种原因,在 Mac OS X 上,我需要使用 CoreFoundation 函数(例如CFBundleCopyBundleURL)来创建需要使用CFRelease. 但是这样做会产生很多这样的警告:

我看到的所有关于这些自动释放池的代码都是用 Objective-C 编写的。有人知道如何在 C 或 C++ 中创建/使用自动释放池吗?

0 投票
2 回答
3451 浏览

iphone - 未分配被释放的指针。复杂 malloc 历史帮助

我已按照此处有用链接的指南进行操作:

iPhone - 调试“未分配指针被释放”错误

但是 malloc_history 真的让我陷入了一个循环,任何人都可以阐明以下内容:

0 投票
1 回答
846 浏览

iphone - 在分离的 NSThread 中分配内存以在后台加载 NSDictionary?

我正在尝试启动后台线程以从 Web 服务中检索 XML 数据。我同步开发它 - 没有线程,所以我知道那部分有效。现在我已经准备好通过生成一个线程来等待响应和解析来提供非阻塞服务。

我在线程内创建了一个 NSAutoreleasePool 并在解析结束时释放它。产生的代码和线程如下:

从主循环代码产生

线程(在“自我”内部)

该方法parseContentsOfResponse用解析的文档内容填充 NSMutableDictionary。我想避免大量移动数据并将其分配回产生线程而不是复制的主循环中。首先,这可能吗,如果没有,我可以简单地从主线程传入一个分配的指针并使用“dictionaryWithDictionary”方法进行分配吗?这似乎太低效了。

解析内容响应

第一个解析部分

每个部分在其 elementStart 发出信号时创建元素字符串。elementEnd 会将对象添加到字典并释放元素。其余的细节是多余的,我认为需要注意的一点是分配不是针对 NSZone,因此它们应该驻留在线程的内存池中。

0 投票
1 回答
299 浏览

iphone - 在手动生成的线程上调用 UIGetScreenImage() 会打印“_NSAutoreleaseNoPool():”消息以记录

这是在中指定的选择器的主体NSThread +detachNewThreadSelector:(SEL)aSelector toTarget:(id)aTarget withObject:(id)anArgument

即使存在自动释放池,我在调用时也会将其打印到日志中UIGetScreenImage()

有没有其他人UIGetScreenImage()在单独的线程上看到过这个?

0 投票
1 回答
417 浏览

objective-c - UIApplication 循环中的 AutoreleasePool

我有一个以 iPhone 应用程序的默认代码开头的应用程序:

因为我的应用程序永远不会停止,[pool release]永远不会被调用。UIApplicationMain是否有自己的标准 UI 循环AutoreleasePool破坏了我的应用期刊的自动发布对象?或者我是否必须AutoreleasePool在我的代码的某个点使用新的我自己的责任,这是定期调用以保持我的应用程序无休止地运行时的内存泄漏?

0 投票
3 回答
1807 浏览

objective-c - 我可以提前释放自动释放对象吗?

即如果我这样做会导致对象立即被释放而不必被池释放?

在文档中找不到关于此的明确解释。

0 投票
2 回答
1564 浏览

objective-c - Objective-C 自动释放池不释放对象

我对 Objective-C 非常陌生,并且正在阅读内存管理。我试图玩弄 NSAutoreleasePool 但不知何故它不会释放我的对象。

我有一个带有 setter 和 getter 的类,它基本上设置了一个 NSString *name。释放池后,我尝试 NSLog 对象,它仍然有效,但我想它不应该?

0 投票
2 回答
1207 浏览

iphone - 如何启动一个 NSRunLoop,并确保它有一个被清空的 NSAutoreleasePool?

我有一个“同步”任务,它依赖于几个“子任务”,其中包括异步网络操作,但都需要访问单个NSManagedObjectContext. 由于NSManagedObjectContexts 的线程要求,我需要这些子任务中的每一个在同一个线程上执行。由于其中一些任务的处理量很大,我需要它们在后台线程上。

目前,我正在通过在我的单例SyncEngine对象的-init方法中执行此操作来启动一个新线程:

-initializeSyncThread方法如下所示:

NSRunLoop这是为这个线程启动的正确方法吗?有更好的方法吗?运行循环只需要处理“performSelector”源,它(及其线程)应该在进程的生命周期内存在。

在设置NSAutoreleasePool.

0 投票
1 回答
502 浏览

iphone - iPhone:在多线程环境中发布 UIViewController 时出现问题

我有一个 UIViewController,在那个控制器中,我从 URL 源获取图像。图像在一个单独的线程中获取,然后在主线程上更新用户界面。此控制器显示为 UIScrollView 父页面中的页面,该页面用于释放不再可见的控制器。

当线程在 UIViewController 释放之前完成获取内容时,一切正常 - 但是当用户在线程完成之前滚动到另一个页面时,控制器被释放并且控制器的唯一句柄由创建控制器 releaseCount 的线程拥有等于 1。现在,一旦线程耗尽 NSAutoreleasePool,控制器就会获得释放,因为 releaseCount 变为 0。此时,我的应用程序崩溃并且我收到以下错误消息:

bool _WebTryThreadLock(bool), 0x4d99c60: 试图从主线程或web线程以外的线程获取web lock。这可能是从辅助线程调用 UIKit 的结果。现在崩溃...

回溯显示应用程序在调用 [super dealloc] 时崩溃,这是完全有道理的,因为在池耗尽时线程必须触发 dealloc 函数。我的问题是,我怎样才能克服这个错误并在不泄漏内存的情况下释放控制器?

我尝试的一种解决方案是在池耗尽之前调用 [self retain] 以使retainCount 不会降至零,然后使用以下代码在主线程中释放控制器:

不幸的是,这没有成功。下面是在线程上执行的函数:

请帮忙!先感谢您。

0 投票
1 回答
723 浏览

iphone - 在 MKMapview regionDidChangeAnimated 方法中使用 NSAutoreleasepool 时应用程序崩溃

我正在开发一个地图应用程序,因为我喜欢在用户更改地图视图时放下图钉(如在 Zillow 应用程序中)。我正在使用以下代码。我正在尝试使用 NSAutoreleasepool 从服务器加载 xml 数据,以在后台线程中进行 xml 解析。

  • (void)mapView:(MKMapView *)mapView regionDidChangeAnimated:(BOOL)animated{

    NSLog(@"内部区域确实改变了");

    /li>

}

-(无效)调用解析{

}

上面的代码工作正常,但是一旦我更改了地图视图,应用程序就会崩溃。任何人都可以帮我解决这个问题吗?

提前致谢。