Ios NSURLSession成员引用类型struct objc_类是指针

Ios NSURLSession成员引用类型struct objc_类是指针,ios,objective-c,iphone,xcode,nsurlsession,Ios,Objective C,Iphone,Xcode,Nsurlsession,我正在尝试实现一个单例来管理NSURLSession请求。这是我的密码: 头文件: @interface httpRequest : NSObject @property (strong,nonatomic) NSURLSession *session; +(httpRequest*)request; 实现文件(.m): 但在这方面: self.session = [NSURLSession sharedSession]; 我得到了这个错误:“NSURLSession成员引用类型stru

我正在尝试实现一个单例来管理NSURLSession请求。这是我的密码:

头文件:

@interface httpRequest : NSObject

@property (strong,nonatomic) NSURLSession *session;

+(httpRequest*)request;
实现文件(.m):

但在这方面:

self.session = [NSURLSession sharedSession];
我得到了这个错误:“NSURLSession成员引用类型struct objc_class是一个指针,您的意思是使用->”

为什么我会出错?

在类方法(以
+
开头的方法)中,
self
指的是类,而不是实例。我想你是想
shareObject.session
。就我个人而言,我会将
session
的设置移动到
init
方法(在这种情况下,您将使用
self.session
语法)

或者,在Objective-C中,您现在可以定义
属性(设计用于快速互操作性)。但是,由于您只需要一个
httpRequest
,这就太过分了。

在类方法(以
+
开头的方法)中,
self
指的是类,而不是实例。我想你是想
shareObject.session
。就我个人而言,我会将
session
的设置移动到
init
方法(在这种情况下,您将使用
self.session
语法)


或者,在Objective-C中,您现在可以定义
属性(设计用于快速互操作性)。但是,由于您只需要一个
httpRequest
,这太过分了。

通常的方法是使用
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;
}

通常的方法是使用
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;
}

完全无关的,您可以考虑遵循可可命名约定,类名以大写字母开头(例如<代码> HTTPRequest < /代码>或<代码> HttpRequest < /代码>)。这只是一个惯例,但它使代码更容易阅读。而且,更进一步说,我不确定我会在名称中使用
Request
,因为“Request”通常与特定的
NSURLSessionTask
(来自web服务的特定请求)相关联,而不是
nsursession
本身。因此,我可以把它命名为“代码> HTTPMask< /Cube >或类似的东西,以避免请求/会话命名混淆……完全无关,您可以考虑遵循COCOA命名约定,类名以大写字母开头(例如,< HTTPRequest > <代码>或<代码> HttpRequest < /代码>)。这只是一个惯例,但它使代码更容易阅读。而且,更进一步说,我不确定我会在名称中使用
Request
,因为“Request”通常与特定的
NSURLSessionTask
(来自web服务的特定请求)相关联,而不是
nsursession
本身。因此,我可以将其命名为
HTTPManager
或类似的名称,以避免请求/会话命名混淆。。。