1

繰り返しますが、私は本を読んでいますが、そのようなクラスの実装があります:

@implementation BNRItemStore


// Init method
- (id)init
{
    self = [super init];

    if(self)
    {
        allItems = [[NSMutableArray alloc] init];
    }

    return self;

}

#pragma mark singleton stuff

// Implementing singleton functionality
+(BNRItemStore*) sharedStore
{
    static BNRItemStore *sharedStore = nil;

    // Check if instance of this class has already been created via sharedStore
    if(!sharedStore)
    {
        // No, create one
        sharedStore = [[super allocWithZone:nil] init];
    }

    return sharedStore;

}

// This method gets called by alloc
+ (id)allocWithZone:(NSZone *)zone
{
    return [self sharedStore];
}

#pragma mark Methods

// return pointer to allItems
-(NSArray*) allItems
{
    return allItems;
}

// Create a random item and add it to the array. Also return it.
-(BNRItem*) createItem
{
    BNRItem *p = [BNRItem randomItem];
    [allItems addObject:p];
    return p;
}

@end

私が奇妙だと思うのは、クラスの外側、たとえば他のクラスのどこにも呼び出されたinitメソッドがないことです。ただし、誰かがクラスBNRItemStore外でそのようなコードを入力した場合でも、何らかの方法で呼び出されます。BNRItemStore

    [[BNRItemStore sharedStore] createItem]; // This still calls the init method of BNRItemStore. How?

誰かが理由を説明してもらえますか?

4

2 に答える 2