子类化单例未按预期工作

Subclassing a singleton not working as expected

我正在编写与 API 通信的 class。我首先创建了一个 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

我写了几个 class 来扩展这个 SessionManager。 API 中的每个实体一个:RestaurantManagerStreetManagerAreaManager。但是,当我使用其中一个然后再使用另一个时,它仍然会使用第一个。

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

// restaurants contains all the restaurants

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

// streets still contains all the restaurants

关于如何解决这个问题有什么想法吗?

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