当前位置: 代码迷 >> Iphone >> 为啥[NSThread exit]会报错:Thread 3 signal SIGABRT? 有完整 救命代码
  详细解决方案

为啥[NSThread exit]会报错:Thread 3 signal SIGABRT? 有完整 救命代码

热度:633   发布时间:2016-04-25 05:51:45.0
为什么[NSThread exit]会报错:Thread 3 signal SIGABRT? 有完整 救命代码

#import "AppDelegate.h"

@implementation AppDelegate

- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions
{
    self.window = [[UIWindow alloc] initWithFrame:[[UIScreen mainScreen] bounds]];
    // Override point for customization after application launch.
    self.window.backgroundColor = [UIColor whiteColor];
    [self.window makeKeyAndVisible];
    
    //创建一个线程队列
    NSOperationQueue *theradQueue=[[NSOperationQueue alloc] init];
    //设置最大同时多少线程
    [theradQueue setMaxConcurrentOperationCount:1];
    //添加线程操作对像
    NSInvocationOperation *op =[[NSInvocationOperation alloc] initWithTarget:self selector:@selector(mutableThread:) object:@"test"];
    //设置纯种优先级别
    op.queuePriority=NSOperationQueuePriorityHigh;
    [theradQueue addOperation:op];
    
    for(int i=0; i<=100; i++)
    {NSLog(@"主线程 %d",i);
    }
    
    return YES;
}

-(void )mutableThread:(NSString *)t
{
    //    NSLog(@"mutableThread %@",t);
    for(int i=0; i<=100; i++)
    {
        NSLog(@"子线程 %d",i);
    }
    
    //跳到主线程进行执行 waitUntilDone 英 [?n?t?l] 美 [?n?t?l]  prep.到…为止; 在…以前    conj.到…为止,在…以前; 直到…才 是否要等待方法执行完成后再继续执行
    [self performSelectorOnMainThread:@selector(mutableThreadCompleter:) withObject:@"OK" waitUntilDone:YES];
    //暂停1秒
    [NSThread sleepForTimeInterval:1];
    NSLog(@"子线程 完成");
    //退出线程
    [NSThread exit];       //? 这里报错:Thread 3 signal SIGABRT
}

-(void) mutableThreadCompleter:(NSString *)t
{
    BOOL isMain =[NSThread isMainThread];
    NSLog(@"线程完成 %@ 主线程%@",t,isMain?@"YES":@"NO");
}

@end


为什么[NSThread exit]会报错:Thread 3 signal SIGABRT? 有完整 救命代码

谢谢
------解决方案--------------------
换成return试下?
我的是C++ 用pthread_exit也是受到SIGABRT
http://bbs.csdn.net/topics/390656401
------解决方案--------------------
基本概念都不清楚!回去看看书吧。
------解决方案--------------------
NSOperationQueue里的操作在完成后会自动标记自身状态为完成后退出线程队列的,不需要你手动去强制退出。而且操作一旦开始也不能强制退出。再而且,NSThread跟操作不属于一类多线程概念= =
  相关解决方案