gpt4 book ai didi

iphone - iPhone SDK 应用程序中的 NSThread、NSTimer 和 AutoreleasePools

转载 作者:行者123 更新时间:2023-12-03 16:51:04 25 4
gpt4 key购买 nike

我想在 iPhone 中创建一个应用程序,并在其中使用 NSThread。我使用

创建了一个线程
[NSThread detachNewThreadSelector:@selector(doThread:)
toTarget:self
withObject:nil];

我希望我的一个线程将处理所有触摸和其他用户交互,第二个线程处理 NSTimer。所以,在 doThread() 中,我分配了 NTimer,

-(void) doThread:(NSString *)poststring {

NSLog(@"create thread:");

[lock lock];
T1 = [NSTimer scheduledTimerWithTimeInterval:(5)
target : self
selector:@selector(onTimer)
userInfo : nil
repeats : YES];
NSLog(@"after timer");

usleep(1);
[lock unlock];
}

In onTImer,

-(void)onTimer

{
NSLog(@"in timer");

}

现在我无法调用NSTimer的onTimer方法。但我可以看到日志中打印出“After Timer”。这是我不能在线程中使用 NSTimer 的东西吗?

这也是我在执行时可以获得的。

NSAutoreleaseNoPool(): Object 0xd15880 of class __NSCFDate autoreleased with no pool in place - just leaking
Stack: (0x305a2e6f 0x30504682 0x30525acf 0x27b5 0x3050a79d 0x3050a338 0x926ae155 0x926ae012)

请帮助我。谢谢。

最佳答案

NSTimer将其时间事件安排在当前 NSRunLoop --您的线程未启动。

如果您只想在一定时间后运行某些内容,请使用 -[NSObject performSelector:withObject:afterDelay:] :

[self performSelector:@selector(onTimer) withObject:nil afterDelay:5.0f];

如果您尝试在后台实际工作,+[NSThread detachNewThreadSelector:toTarget:withObject:]将按预期工作,但如果没有NSRunLoop,您不应该在后台运行计时器事件。另外,您需要将代码包装在自动释放池中:

- (void)doThread:(NSString *)poststring
{
NSAutoreleasePool *pool = [[NSAutoreleasePool alloc] init];
// Your code goes in here
[pool drain];
}

关于iphone - iPhone SDK 应用程序中的 NSThread、NSTimer 和 AutoreleasePools,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1338891/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com