NSThread和内存管理

发布于 2024-08-29 22:54:31 字数 362 浏览 5 评论 0 原文

想象一下,我使用 detachNewThreadSelector:toTarget:withObject: 创建并执行一个 NSThread 对象。线程执行的方法可能如下所示:

- (void)search {
    NSAutoreleasePool *pool = [[NSAutoreleasePool alloc] init];

    // perform a lengthy search here.

    [pool release];
}

然后,在释放池之前,我可能会使用 cancel 方法在线程运行时终止该线程。 NSAutoreleasePool 对象会发生什么?我想它会泄漏,不是吗?

Imagine I create and execute an NSThread object using detachNewThreadSelector:toTarget:withObject:. The method executed by the thread might look like this:

- (void)search {
    NSAutoreleasePool *pool = [[NSAutoreleasePool alloc] init];

    // perform a lengthy search here.

    [pool release];
}

I then might use the cancel method to kill the thread while it's running, before the pool gets released. What happens to the NSAutoreleasePool object? I suppose it will leak, won't it?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

梦里南柯 2024-09-05 22:54:31

-(void)cancel 不会强制取消,它只是请求取消。您的 -(void)search 将运行直至完成。阅读“响应取消命令”了解详细信息。

-(void)cancel doesn't force cancellation, it merely requests it. Your -(void)search will run to completion. Read "Responding to the Cancel Command" for details.

默嘫て 2024-09-05 22:54:31

我强烈推荐 NSOperationQueue 来执行简单的并发任务。

I highly recommend NSOperationQueue for simple concurrent tasks.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文