但当_srWebSocket连接时,将返回 nil
@interface SocketManager : NSObject
@property (nonatomic, weak) SRWebSocket *srWebSocket;
+ (SocketManager *) sharedInstance;
@end
@implementation SocketManager
@synthesize srWebSocket = _srWebSocket;
+ (SocketManager *) sharedInstance {
static SocketManager *sharedInstance = nil;
static dispatch_once_t onceToken;
dispatch_once(&onceToken, ^{
sharedInstance = [[SocketManager alloc] init];
});
return sharedInstance;
}
- (id)init {
if (self = [super init]) {
NSLog(@"In SocketKeeperSingleton init");
}
return self;
}
- (SRWebSocket *) srWebSocket {
if (!_srWebSocket || _srWebSocket.readyState == SR_CLOSED) {
_srWebSocket = [[SRWebSocket alloc] initWithURL:[NSURL URLWithString:@"wss://...:8000"]];
[_srWebSocket open];
}
return _srWebSocket;
}
@end
Call singleton
srWebSocket = [SocketManager sharedInstance].srWebSocket;
因为你在shareInstance Method 中写了'static SocketManager *sharedInstance = nil;'。当此方法每次发送 nil 时调用 .
+ (SocketManager *) sharedInstance {
static SocketManager *sharedInstance = nil;
static dispatch_once_t onceToken;
dispatch_once(&onceToken, ^{
sharedInstance = [[SocketManager alloc] init];
});
return sharedInstance;
}
在 shareInstance 方法 "static SocketManager *sharedInstance = nil;">
你缺少srWebSocket
方法调用,
第一种方式,
在 singleton.h 文件中声明一个方法
-(void) doInitialSetupOnLaunch;
将此方法添加到 singleton.m 文件中的某个位置,
-(void) doInitialSetupOnLaunch {
//Put your initialized code i mean you can call your method from here & define your properties here.
_srWebSocket = [self srWebSocket];
}
- (SRWebSocket *) srWebSocket {
if (!_srWebSocket || _srWebSocket.readyState == SR_CLOSED) {
_srWebSocket = [[SRWebSocket alloc] initWithURL:[NSURL URLWithString:@"wss://...:8000"]];
[_srWebSocket open];
}
return _srWebSocket;
}
从某个地方调用它,您可以从appDelegate.m调用的最佳方式
现在您已准备好按属性访问它,
Call singleton
srWebSocket = [SocketManager sharedInstance].srWebSocket;
或第二种方式
SRWebSocket * srWebSocket = [[SocketManager sharedInstance] srWebSocket];