Ios 使用NSOutputStream随机设置EXC_断点

Ios 使用NSOutputStream随机设置EXC_断点,ios,nsstream,nsoutputstream,Ios,Nsstream,Nsoutputstream,我正在编写一个使用NSOutputStream的应用程序。我初始化了如下连接: delegate = self; CFReadStreamRef readStream; CFWriteStreamRef writeStream; CFStreamCreatePairWithSocketToHost(NULL, (__bridge CFStringRef)url,port, &readStream, &writeStream); CFReadStreamSetProperty(r

我正在编写一个使用NSOutputStream的应用程序。我初始化了如下连接:

delegate = self;
CFReadStreamRef readStream;
CFWriteStreamRef writeStream;

CFStreamCreatePairWithSocketToHost(NULL, (__bridge CFStringRef)url,port, &readStream, &writeStream);
CFReadStreamSetProperty(readStream, kCFStreamPropertyShouldCloseNativeSocket, kCFBooleanTrue);
CFWriteStreamSetProperty(writeStream, kCFStreamPropertyShouldCloseNativeSocket, kCFBooleanTrue);

inputStream = (__bridge_transfer NSInputStream *)readStream;
outputStream = (__bridge_transfer NSOutputStream *)writeStream;

[inputStream setDelegate:delegate];
[outputStream setDelegate:delegate];

loop = [NSRunLoop currentRunLoop];
[inputStream scheduleInRunLoop:loop forMode:NSDefaultRunLoopMode];
[outputStream scheduleInRunLoop:loop forMode:NSDefaultRunLoopMode];

[inputStream setProperty:NSStreamSocketSecurityLevelTLSv1 forKey:NSStreamSocketSecurityLevelKey];
[outputStream setProperty:NSStreamSocketSecurityLevelTLSv1 forKey:NSStreamSocketSecurityLevelKey];



[inputStream setProperty:NSStreamSocketSecurityLevelNegotiatedSSL
                  forKey:NSStreamSocketSecurityLevelKey];
[outputStream setProperty:NSStreamSocketSecurityLevelNegotiatedSSL
                   forKey:NSStreamSocketSecurityLevelKey];

NSDictionary *settings = [[NSDictionary alloc] initWithObjectsAndKeys:
                          [NSNumber numberWithBool:YES], kCFStreamSSLAllowsExpiredCertificates,
                          [NSNumber numberWithBool:YES], kCFStreamSSLAllowsAnyRoot,
                          [NSNumber numberWithBool:NO], kCFStreamSSLValidatesCertificateChain,
                          kCFNull,kCFStreamSSLPeerName,
                          nil];

CFReadStreamSetProperty((CFReadStreamRef)inputStream, kCFStreamPropertySSLSettings, (CFTypeRef)settings);
CFWriteStreamSetProperty((CFWriteStreamRef)outputStream, kCFStreamPropertySSLSettings, (CFTypeRef)settings);

[outputStream open];
[inputStream open];

[self sendVersionOrWait];
[loop run];
然后根据NSStreamDelegate方法执行一些操作。通过以下方式完成闭合连接:

 [inputStream close];
[outputStream close];
[inputStream removeFromRunLoop:[NSRunLoop currentRunLoop] forMode:NSDefaultRunLoopMode];
[outputStream removeFromRunLoop:[NSRunLoop currentRunLoop] forMode:NSDefaultRunLoopMode];
[inputStream setDelegate:nil];
[outputStream setDelegate:nil];

inputStream = nil;
outputStream = nil;
有时(这是随机的),我得到EXC_断点和应用程序崩溃。这是崩溃日志的一部分:

异常类型:EXC_断点(SIGTRAP) 异常代码:0x0000000001,0x000000000000defe 由线程触发:5

线程5名称:调度队列:com.apple.root.default-qos

线程5崩溃:

0 CoreFoundation 0x22767e22 CFHash+130

1个CoreFoundation 0x22768d70 CfBasichGetCountOfKey+1152

2芯基础0x227688aa CFSETCONTAINS值+98

3 CoreFoundation 0x2279ca5a CFRunLoopRemoveSource+226

4 CFNetwork 0x22343eca SocketStream::write(uu CFWriteStream*,无符号字符常量*,long,CFStreamError*)+426

5 CFN网络0x223480c2 WriteStreamCallbacks::write(uuuCfWriteStream*,无符号字符常量*,long,CFStreamError*,void*)+34

6 CoreFoundation 0x2278d7ec CFWriteStreamWrite+356

7 App 0x000a0190-[AppMenuViewController发送版本](AppMenuViewController.m:763)

8 App 0x000a0c68-[AppMenuViewController sendVersionOrWait](AppMenuViewController.m:832)

<P>9基金会0x23 5655 E4 10 CoreFoundation 0x22828734CFRUNLOOP\u正在调用\u OUT\u到\u计时器\u回调函数

11 CoreFoundation 0x228282b4_ucfrunloopdotimer+652

12 CoreFoundation 0x2282651e _ucfrunlooprun+1414

13 CoreFoundation 0x22773dac CFRunLoopRunSpecific+472

14 CoreFoundation 0x22773bbe CFRUNLOOPSRUNINMODE+102

15基金会0x23 4AB16C-[NSRunLoCon(NSRunCurrin)RunMy:BeFueDATE:] +260

16基金会0x23 4F95E0- [ NSRunLoCon(NSRunCoul)Run] + 76

17 App 0x0009feaa-[AppMenuViewController初始连接:带端口:](AppMenuViewController.m:749)

18 App 0x000a1642-[AppMenuViewController流:handleEvent:](AppMenuViewController.m:952)

19 CoreFoundation 0x227d9b94信号事件同步+144

20 CoreFoundation 0x227e3ef2\u cfstream\u solo\u signalEventSync+198

21 CoreFoundation 0x227d981e _CFStreamSignalEvent+322

22 CFNetwork 0x222b7bd4 SocketStream::dispatchSignalFromSocketCallbackUnlocked(SocketStreamSignalHolder*)+36

23 CFNetwork 0x222b78be SocketStream::socketCallback(uu CFSocket*,无符号长,uu CFData const*,void const*)+146

24 CFNetwork 0x222b77f2 SocketStream::_SocketCallBack_stream(uu CFSocket*,无符号长,uuu CFData const*,void const*,void*)+54

25芯基础0x2282b0bc__CFSocketPerformV0+552

26 CoreFoundation 0x22828804CFRUNLOOP\u正在调用\u OUT\u到\u A\u SOURCE0\u PERFORM\u函数

27 CoreFoundation 0x22827c16__CFRunLoopDoSources0+218

28 CoreFoundation 0x22826294 _ucfrunlooprun+764

29 CoreFoundation 0x22773dac CFRunLoopRunSpecific+472

30 CoreFoundation 0x22773bbe CFRUNLOOPSRUNINMODE+102

31基金会0x23 4AB16C-[NSRunLoCon(NSRunCurrin)RunMy:BeFueDATE:] +260

32基金会0x23 4F95E0- [ NSRunLoCon(NSRunCoul)Run] + 76

33 App 0x0009feaa-[AppMenuViewController初始连接:带端口:](AppMenuViewController.m:749)

34应用程序0x0009b664 \uu 58-[AppMenuViewController警报视图:ClickedButtonIndex:]\u块\u调用(AppMenuViewController.m:385)

35 libdispatch.dylib 0x30521610调度调用块和释放+8

36 libdispatch.dylib 0x3052d350 _dispatch_root_queue_drain+816

37 libdispatch.dylib 0x3052e27a _dispatch_worker_thread3+102

38 libsystem_pthread.dylib 0x3069ee22_pthread_wqthread+666

39 libsystem_pthread.dylib 0x3069eb74 start_wqthread+4


我想这可能是由网络问题引起的,因为它出现在我的WIFI路由器没有互联网连接的情况下。但我不确定,也不知道如何消除这个错误。请提供帮助:)

我猜这与线程有关。
尝试对主线程执行分派,以确保这一切都在主线程上完成,并查看这是否神奇地解决了问题。如果是这样的话,您知道应该在哪里查找……

如果您放置了断点,请删除断点,然后检查我是否执行了此操作,但没有任何更改