对单例进行子类化不按预期工作

时间:2017-09-20 14:30:41

标签: objective-c afnetworking nsobject

我正在编写一个与API通信的类。我首先创建了一个SessionManager

@interface SessionManager : AFHTTPSessionManager

+ (id)sharedManager;

@end

static NSString *const kBaseURL = @"https://myapi.com";

@implementation SessionManager

- (id)init {
    self = [super initWithBaseURL:[NSURL URLWithString:kBaseURL]];
    if(!self) return nil;

    self.responseSerializer = [AFJSONResponseSerializer serializer];
    self.requestSerializer = [AFJSONRequestSerializer serializer];

    return self;
}

+ (id)sharedManager {
    static SessionManager *_sessionManager = nil;

    static dispatch_once_t onceToken;
    dispatch_once(&onceToken, ^{
        _sessionManager = [[self alloc] init];
    });

    return _sessionManager;
}

@end

我写了几个扩展这个SessionManager的类。 API中的每个实体都有一个:RestaurantManagerStreetManagerAreaManager。但是,当我使用其中一个而另一个时,它仍会使用第一个。

NSArray *restaurants = [[RestaurantManager sharedManager] getRestaurants];

// restaurants contains all the restaurants

NSArray *streets = [[StreetsManager sharedManager] getStreets];

// streets still contains all the restaurants

关于如何解决此问题的任何想法?

1 个答案:

答案 0 :(得分:1)

您应该覆盖子类中的+ (id)sharedManager方法。否则,它们会转到相同的sharedManager方法并与相同的static SessionManager变量进行交互。