我有一个比任何事情都更让我困惑的问题。我正在尝试使用 GCDAsyncSocket 在 Objective-C 中建立套接字连接。当且仅当调用套接字变量时,我发送到我的 GCDAsyncSocket 的 connectToHost 消息失败并显示 EXC_BAD_ACCESS socket
。确切地说,这不是问题,因为我很容易使用不同的变量名,但我很好奇为什么会发生这种情况。
这是我认为是我的代码的相关部分,来自我创建的一个名为 SocketManager 的类。大部分代码取自GCDAsyncSocket intro。下面的代码在指示行出现 EXC_BAD_ACCESS 失败。
#import "SocketManager.h"
#import "GCDAsyncSocket.h"
@implementation SocketManager
GCDAsyncSocket *socket;
-(id) init {
self = [super init];
socket = [[GCDAsyncSocket alloc] initWithDelegate:self delegateQueue:dispatch_get_main_queue()];
NSError *err = nil;
// EXC_BAD_ACCESS happens at the line below
if (![socket connectToHost:@"localhost" onPort:26400 error:&err]) NSLog(@"I goofed: %@", err);
NSLog(@"just created socket");
return self;
}
但是,如果我将变量名称从socket
tosock
或banana
任何其他名称更改,代码运行良好,这让我很奇怪。为什么会这样?是socket
某种保留的系统字吗?如果是这种情况,我希望代码根本无法编译,但我对 Objective-C 还是很陌生。
顺便说一句,我的didConnectToHost:
委托方法很少被调用,我认为这是一个单独的问题,但据我所知,它可能是相关的。