Я следую за книгой Big Nerd Ranch по программированию iOS.Проблема с пониманием статического класса в iOS
Существует образец статического класса:
#import <Foundation/Foundation.h>
@interface BNRItemStore : NSObject
+ (BNRItemStore *) sharedStore;
@end
У меня есть проблема undrstanding бит ниже со знаком вопроса в комментариях. Если я попытаюсь выделить этот класс, метод overriden приведет меня к sharedStore
, который, в свою очередь, устанавливает статический указатель sharedStore
на нуль. Условное значение после этого произойдет впервые, потому что указатель не существует.
Идея состоит в том, что во второй раз, когда я нахожусь на том же месте, он не будет выделять новый экземпляр и вместо этого получить существующий экземпляр. Однако с static BNRItemStore *sharedStore = nil;
Я устанавливаю указатель на нуль и уничтожаю его, не так ли? Следовательно, каждый раз, когда я создаю непреднамеренно новый экземпляр, нет?
#import "BNRItemStore.h"
@implementation BNRItemStore
+ (BNRItemStore*) sharedStore
{
static BNRItemStore *sharedStore = nil; // ???
if (!sharedStore) {
sharedStore = [[super allocWithZone:nil] init];
}
return sharedStore;
}
+(id)allocWithZone:(NSZone *)zone
{
return [self sharedStore];
}
@end
У вас есть так называемый шаблон «singleton». Самая запутанная часть состоит в том, что инструкция, начинающаяся с 'static', не выполняется как часть метода-оболочки, но выполняется только один раз, когда класс загружается. –
(Надеюсь, книга на самом деле не называет это «статическим классом».) –