iOS POS之 AsyncSocket release环境运行崩溃问题
2015-07-17 12:15
921 查看
最近在做POS刷卡,报文是采用TCP传输,用的是AsyncSocket 三方库传输的字节流。
遇到的一个问题就是在release环境下,AsyncSocket 请求会直接崩溃。试了各种办法,最后找到了解决方法,在这里分享给大家。
首先崩溃的地方是
- (void)doStreamOpen
{
if ((theFlags &kDidCompleteOpenForRead)
&& (theFlags &kDidCompleteOpenForWrite))
{
NSError *err =nil;
// Get the socket
if (![selfsetSocketFromStreamsAndReturnError:
&err])
{
NSLog (@"AsyncSocket %p couldn't get socket from streams, %@. Disconnecting.",self,
err);
[selfcloseWithError:err];
return;
}
// Stop the connection attempt timeout timer
[selfendConnectTimeout];
if ([self.theDelegaterespondsToSelector:@selector(onSocket:didConnectToHost:port:)])
{
[self.theDelegateonSocket:selfdidConnectToHost:[selfconnectedHost]
port:[selfconnectedPort]];
}
// Immediately deal with any already-queued requests.
[selfmaybeDequeueRead];
[selfmaybeDequeueWrite];
}
}
在调delegate方法的时候报内存错误,直接崩溃。
由于是提示的是内存地址原因,我想了想可能是没在主线程中运行,所以我在调用这个方法的地方在主线程中执行。
在这里我搜索了一下调用这个方法(doStreamOpen)的地方,修改如下:
case kCFStreamEventOpenCompleted:
theFlags |=kDidCompleteOpenForRead;
[selfperformSelectorOnMainThread:@selector(doStreamOpen)withObject:nilwaitUntilDone:YES];
//[self doStreamOpen];
break;
应该是放在主线程里执行就行了。
如果还是不行,那么我做的另一个变动是把delegate设置成了属性
@property(nonatomic,assign)id<AsyncSocketDelegate> theDelegate;
注意要在
@protocol AsyncSocketDelegate 后面加上 <NSObject> 要不然会报找不到委托方法的错误。
如果还是不行,欢迎来跟我一起讨论 ———— LC
遇到的一个问题就是在release环境下,AsyncSocket 请求会直接崩溃。试了各种办法,最后找到了解决方法,在这里分享给大家。
首先崩溃的地方是
- (void)doStreamOpen
{
if ((theFlags &kDidCompleteOpenForRead)
&& (theFlags &kDidCompleteOpenForWrite))
{
NSError *err =nil;
// Get the socket
if (![selfsetSocketFromStreamsAndReturnError:
&err])
{
NSLog (@"AsyncSocket %p couldn't get socket from streams, %@. Disconnecting.",self,
err);
[selfcloseWithError:err];
return;
}
// Stop the connection attempt timeout timer
[selfendConnectTimeout];
if ([self.theDelegaterespondsToSelector:@selector(onSocket:didConnectToHost:port:)])
{
[self.theDelegateonSocket:selfdidConnectToHost:[selfconnectedHost]
port:[selfconnectedPort]];
}
// Immediately deal with any already-queued requests.
[selfmaybeDequeueRead];
[selfmaybeDequeueWrite];
}
}
在调delegate方法的时候报内存错误,直接崩溃。
由于是提示的是内存地址原因,我想了想可能是没在主线程中运行,所以我在调用这个方法的地方在主线程中执行。
在这里我搜索了一下调用这个方法(doStreamOpen)的地方,修改如下:
case kCFStreamEventOpenCompleted:
theFlags |=kDidCompleteOpenForRead;
[selfperformSelectorOnMainThread:@selector(doStreamOpen)withObject:nilwaitUntilDone:YES];
//[self doStreamOpen];
break;
应该是放在主线程里执行就行了。
如果还是不行,那么我做的另一个变动是把delegate设置成了属性
@property(nonatomic,assign)id<AsyncSocketDelegate> theDelegate;
注意要在
@protocol AsyncSocketDelegate 后面加上 <NSObject> 要不然会报找不到委托方法的错误。
如果还是不行,欢迎来跟我一起讨论 ———— LC
相关文章推荐
- 峰回路转,Firefox 浏览器即将重返 iOS 平台
- 峰回路转,Firefox 浏览器即将重返 iOS 平台
- 不可修补的 iOS 漏洞可能导致 iPhone 4s 到 iPhone X 永久越狱
- iOS 12.4 系统遭黑客破解,漏洞危及数百万用户
- 每日安全资讯:NSO,一家专业入侵 iPhone 的神秘公司
- [转][源代码]Comex公布JailbreakMe 3.0源代码
- TCP版backshell的VBS脚本代码
- TCP Wrappers防火墙介绍与封锁IP地址的方法
- c语言多进程tcp服务器示例
- js判断客户端是iOS还是Android等移动终端的方法
- IOS开发环境windows化攻略
- win2003连接限制TCP连接限制
- .net平台推送ios消息的实现方法
- PowerShell脚本开发之收发TCP消息包
- C#实现TCP连接信息统计的方法
- 探讨Android与iOS,我们将何去何从?
- Android TCP 文件客户端与服务器DEMO介绍
- Android中实现TCP和UDP传输实例
- Android、iOS和Windows Phone中的推送技术详解