我正在尝试实现单例来管理NSURLSession请求。这是我的代码:
标题文件:
@interface httpRequest : NSObject
@property (strong,nonatomic) NSURLSession *session;
+(httpRequest*)request;
实施文件(.m):
+(httpRequest*)request
{
static httpRequest *shareObject = nil;
static dispatch_once_t onceToken;
dispatch_once ( &onceToken, ^{
shareObject = [[self alloc] init];
self.session = [NSURLSession sharedSession];
});
return shareObject;
}
但是在这一行:
self.session = [NSURLSession sharedSession];
我收到此错误:“NSURLSession成员引用类型struct objc_class是您指定使用的指针 - >”
答案 0 :(得分:2)
通常的方法是使用init
方法
+(httpRequest*)request
{
static httpRequest *shareObject = nil;
static dispatch_once_t onceToken;
dispatch_once ( &onceToken, ^{
shareObject = [[self alloc] init];
});
return shareObject;
}
- (id)init
{
self = [super init];
if (self) {
self.session = [NSURLSession sharedSession];
}
}
return self;
}
但是因为sharedObject
实际上是self
,所以这也应该有用
+(httpRequest*)request
{
static httpRequest *shareObject = nil;
static dispatch_once_t onceToken;
dispatch_once ( &onceToken, ^{
shareObject = [[self alloc] init];
shareObject.session = [NSURLSession sharedSession];
});
return shareObject;
}
答案 1 :(得分:1)
在类方法(以C#
开头的方法)中,Table1: column1, column2
Table2: column3, column4
引用类,而不是实例。我认为你打算+
。就个人而言,我会将self
的设置移至shareObject.session
方法(在这种情况下,您将使用session
语法)。
或者,在Objective-C中,您现在可以定义init
属性(专为Swift互操作性而设计)。但是,既然你只有一个self.session
,那就太过分了。