我正在关注关于 iOS 编程的 Big Nerd Ranch 书。
有一个静态类的示例:
#import <Foundation/Foundation.h>
@interface BNRItemStore : NSObject
+ (BNRItemStore *) sharedStore;
@end
我在理解下面带有问号的评论时遇到了问题。如果我尝试分配这个类,被覆盖的方法会将我带到sharedStore
,这反过来又将静态指针设置sharedStore
为 nil。由于指针不存在,条件 after 将第一次命中。
这个想法是,我第二次在同一个地方时,它不会分配新实例而是获取现有实例。但是,static BNRItemStore *sharedStore = nil;
我将指针设置为 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