首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >NSThread、AsyncSocket和对象释放

NSThread、AsyncSocket和对象释放
EN

Stack Overflow用户
提问于 2010-02-17 09:27:59
回答 1查看 962关注 0票数 0

我有一段使用AsyncSocket的网络代码,但将它移到了一个单独的运行循环中。我用下面这段代码创建这个运行循环:

代码语言:javascript
复制
[NSThread detachNewThreadSelector:@selector(_workerLoop) toTarget:self withObject:nil];

下面是我的_workerLoop的样子(它们都在同一个类中):

代码语言:javascript
复制
-(void)_workerLoop {
    workerLoop = [[NSRunLoop currentRunLoop] retain];

    while(keepWorkerLoopRunning) {
        NSAutoreleasePool *pool = [[NSAutoreleasePool alloc] init];
        [workerLoop runMode:NSDefaultRunLoopMode beforeDate:[NSDate dateWithTimeIntervalSinceNow:0.5f]];
        [pool release];
    }

    [workerLoop release];
    workerLoop = nil;
}

现在,根据文档,NSThread将保留目标,并且由于此线程仅在AsyncSocket断开连接时终止,因此在套接字断开连接之前不可能释放和释放此对象。

我怎么才能解决这个问题,或者我做错了什么?

EN

回答 1

Stack Overflow用户

发布于 2010-02-18 02:45:35

我已经通过将runloop构造函数重构到自己的类中解决了这个问题,这个类由处理网络代码的父类引用。这样,父对象将被释放,它可以停止线程并释放运行循环

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

https://stackoverflow.com/questions/2277728

复制
相关文章

相似问题

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