gpt4 book ai didi

cocoa - NSThread - 获取 bool 值

转载 作者:行者123 更新时间:2023-12-03 17:16:56 24 4
gpt4 key购买 nike

我正在尝试通过 NSThread 获取 -(BOOL)backupDropletUpdateAvailable 返回的 bool 值。

为此,我尝试了以下操作:

` BOOL isAvailable = NO;

[NSThread detachNewThreadSelector:@selector(backupDropletUpdateAvailable) toTarget:isAvailable withObject:nil];

if (isAvailable == YES)
{//etc

这会返回一个警告,因为 BOOL 是一个整数,而 toTarget: 是一个指针。但我怎样才能得到这个值呢?如果我不在单独的线程上执行此操作,我的 xib 在出现时将会滞后。

谢谢:)

最佳答案

线程运行的方法需要写入关心结果的对象可以访问的位置。一种解决方案是使用一个方法包装调用、获取结果并发布一条通知,其中将结果包含在用户信息中。然后关心的对象可以处理该通知。请注意,对象必须在线程启动之前创建,否则对象可能会错过通知。

解决方案的草图是:

#define kDropletAvailabilityNotificationName @"com.myapp.notifications.DropletAvailability"

@implementation MyObject
- (void)registerNotifications {
[[NSNotificationCenter defaultCenter]
addObserver:self selector:@selector(dropletAvailabilityNotification:)
name:kDropletAvailaibiltyNotificationName
object:nil];
}

- (void)unregisterNotifications {
[[NSNotificationCenter defaultCenter]
removeObserver:self];
}

- (void)dropletAvailabilityNotification:(NSNotification *)note {
NSNumber *boolNum = [note object];
BOOL isAvailable = [boolNum boolValue];
/* do something with isAvailable */
}

- (id)init {
/* set up… */
[self registerNotifications];
return self;
}

- (void)dealloc {
[self unregisterNotifications];
/* tear down… */
[super dealloc];
}
@end

@implementation CheckerObject
- (rsotine)arositen {
/* MyObject must be created before now! */
[self performSelectorInBackground:@selector(checkDropletAvailability) withObject:nil];
}

- (void)checkDropletAvailability {
id pool = [[NSAutoreleasePool alloc] init];
BOOL isAvailable = [self backupDropletUpdateAvailable];
NSNumber *boolNum = [NSNumber numberWithBool:isAvailable];
[[NSNotificationCenter defaultCenter]
postNotificationName:kDropletAvailaibiltyNotificationName
object:boolNum];
[pool drain];
}

关于cocoa - NSThread - 获取 bool 值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4034512/

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