首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >泄漏的NSAutoreleasePool

泄漏的NSAutoreleasePool
EN

Stack Overflow用户
提问于 2010-11-12 00:13:31
回答 2查看 1.6K关注 0票数 0

我正在开发一个应用程序,还剩下一个漏洞。泄漏的对象为NSAutoreleasePool,大小为32字节。在堆栈跟踪中,只调用基础方法。我不知道如何解决这个问题。

在模拟器中没有泄漏报告,在设备上只有这次泄漏。

你有什么想法吗?

自动释放池是我自己定义的池。

在我的视图控制器中,我调用:

代码语言:javascript
复制
[self performSelectorInBackground:@selector(getDetailInfo:) withObject:self.infoID];

这是getDetailInfo:

代码语言:javascript
复制
- (void)getDetailInfo:(NSString *)theID {

    NSAutoreleasePool *pool = [[NSAutoreleasePool alloc] init];

    DetailInfo *info = [[DataProvider sharedInstance] getDetailInfo:theID]; //the return object is autoreleased.
    [self performSelectorOnMainThread:@selector(updateViewWithDetailInfo:) withObject:info waitUntilDone:NO];

    [pool release];
}

一些附加信息:

为了测试,我更改了所有使用performSelectorInBackground调用的方法,使其在主线程上运行,并删除了那些自动释放工具。

我还是收到了NSAutoreleasePool上的漏洞。今天我了解到你可以在仪器的堆栈跟踪中显示“库名称”。:-)我将其复制到下面,您可以在第6行和第7行看到MapKit。

代码语言:javascript
复制
0 libSystem.B.dylib calloc
1 libobjc.A.dylib _internal_class_createInstanceFromZone
2 libobjc.A.dylib class_createInstance
3 CoreFoundation +[NSObject(NSObject) allocWithZone:]
4 Foundation +[NSAutoreleasePool allocWithZone:]
5 CoreFoundation +[NSObject(NSObject) alloc]
6 MapKit TileCachePrivate::runCacheThread()
7 MapKit _runCacheThread(void*)
8 libSystem.B.dylib _pthread_start
9 libSystem.B.dylib thread_assign_default

下面是mapview的代码:

代码语言:javascript
复制
    MKMapView *omgeving = [[MKMapView alloc] initWithFrame:CGRectMake(11, 22, 298, 297)];
    omgeving.delegate = nil;
    [self addSubview:omgeving];
    [omgeving release];     

如果我注释掉MapView代码,就不会泄漏。如果我把它留在里面,我就会漏水。

代码语言:javascript
复制
Leaked Object       #   Address     Size    Responsible Library Responsible Frame
NSAutoreleasePool       0x6a52e50   32      Foundation          +[NSAutoreleasePool allocWithZone:]

感谢你到目前为止的所有评论。有什么建议吗?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2010-11-12 21:23:38

已知问题:https://devforums.apple.com/message/282497#282497

感谢您的参与。

票数 2
EN

Stack Overflow用户

发布于 2010-11-12 00:50:32

我发现一个泄漏的NSAutoreleasePool经常指向错误的NSAutoreleasePool。你在数据提供者的getDetailInfo中使用NSAutoreleasePool吗?那打电话的人呢?

我以前读过,排出外部的NSAutoreleasePool应该排出内部的,但我还没有发现情况是这样的。

…此外,在NSAutoreleasePool上,drainrelease更受欢迎。不过,这不是你的问题。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/4156517

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档