Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/heroku/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
NSThread中的Objective-c循环_Objective C_Nsthread_Gnustep - Fatal编程技术网

NSThread中的Objective-c循环

NSThread中的Objective-c循环,objective-c,nsthread,gnustep,Objective C,Nsthread,Gnustep,我想构建一个可以在线程中运行循环的对象。 当我使用NSThread在线程中运行循环时,有时工作正常,有时出现错误消息: Uncaught exception NSInvalidArgumentException, reason: Tried to add nil value for key 'NSArgumentDomain' to dictionary. 我怎么修理它?或NSthread教程可能会有所帮助 #import <Foundation/Foundation.h> @

我想构建一个可以在线程中运行循环的对象。 当我使用NSThread在线程中运行循环时,有时工作正常,有时出现错误消息:

Uncaught exception NSInvalidArgumentException, reason: Tried to add nil value for key 'NSArgumentDomain' to dictionary. 
我怎么修理它?或NSthread教程可能会有所帮助

#import <Foundation/Foundation.h>

@interface ThreadTest: NSObject

-(void) run;

-(void) goThread;

@end


@implementation ThreadTest

-(void) run {

    @autoreleasepool {
        int i;
        for (i = 1; i < 5; i++) {
            NSLog (@"Bar");
        }

        NSLog (@"end of loop");
    }
}

-(void) goThread {
    [NSThread detachNewThreadSelector: @selector(run)
                             toTarget: self
                           withObject: nil];
}


int main(void) {
    @autoreleasepool {
        ThreadTest *t = [[ThreadTest alloc] init];
        [t goThread];
    }

    return 0;
}
#导入
@接口线程测试:NSObject
-(无效)运行;
-(void)goThread;
@结束
@线程测试的实现
-(无效)运行{
@自动释放池{
int i;
对于(i=1;i<5;i++){
NSLog(@“Bar”);
}
NSLog(“循环结束”);
}
}
-(void)goThread{
[NSThread detachNewThreadSelector:@selector(运行)
目标:自我
withObject:nil];
}
内部主(空){
@自动释放池{
ThreadTest*t=[[ThreadTest alloc]init];
[t goThread];
}
返回0;
}

如果您尝试在字典中插入NIL,它将崩溃。但是,您可以向其插入NSNULL参数

所以只要检查一下对象是否为nil,就可以插入NSNULL

controlObject != nil ? controlObject : [NSNull null];

我不明白,你能解释一下吗?看你的错误日志,我误解了你的问题。例外情况可能是因为这不是线程安全的,多个线程可能试图同时访问该项。关于这一点,这里有很多类似的问题,你应该用好的答案进行搜索。看看这个例子:我想通过制作一个像龟兔赛跑程序这样的比赛游戏来理解objective-c中的线程。它不像java中的线程那样易于使用。我想我需要更多地了解这一点。非常感谢你。