2013-07-25 1 views
3

я создал пользовательский класс в Xcode: PaperPack и определенные 2 мгновенные переменные: title и author -Получить количество экземпляров пользовательского класса

Тогда я Alloc 2 экземпляра класса, как показано ниже:

PaperPack *pack1 = [[PaperPack alloc] init]; 
pack1.title = @"Title 1"; 
pack1.author = @"Author"; 

PaperPack *pack2 = [[PaperPack alloc] init]; 
pack1.title = @"Title 2"; 
pack1.author = @"Author"; 

Тогда как мне подсчитать и вернуть количество экземпляров, которые я создал с этим классом?

+0

Почему вы хотите ? – Wain

+0

@Wain Мне нужно передать номер другому классу. – fahrulazmi

ответ

0

Нет, вы не можете получить напрямую. Всякий раз, когда вы создаете экземпляр, добавьте его в любой массив и затем получите доступ к нему с использованием свойств этого массива.

Ex:

NSMutableArray *allInstancesArray = [NSMutableArray new]; 
PaperPack *pack1 = [[PaperPack alloc] init]; 
pack1.title = @"Title 1"; 
pack1.author = @"Author"; 
    [allInstancesArray addObject:pack1]; 

PaperPack *pack2 = [[PaperPack alloc] init]; 
pack1.title = @"Title 2"; 
pack1.author = @"Author"; 
    [allInstancesArray addObject:pack2]; 

Затем получить считаются:

NSLog(@"TOTAL INSTANCES : %d",[allInstancesArray count]); 
+1

В его случае может быть лучше (если ему нужно только количество экземпляров), чтобы сохранить экземпляр int, например, вместо NSMutableArray. Как решение @Wain. –

+0

Спасибо @ nishant-тяги это работает! – fahrulazmi

+0

Хм. приветствую чувак :-) –

5

Вы можете создать фабрику синглтон, который вы используете для подсчета количества экземпляров запрошенных (то вы должны создать все экземпляры с использованием фабрики). Или вы можете добавить переменную static в класс PaperPack и увеличивать ее каждый раз (в методе init, тогда вы должны звонить init каждый раз).

+2

+1, если вам нужно всего лишь число ... count ... У вас не должно быть массива instanses – Injectios

+0

Singleton ... лучшие практики в лучшем виде – madLokesh

0
static PaperPack *_paperPack; 

@interface PaperPack() 

@property (nonatomic, assign) NSInteger createdCount; 

- (PaperPack *)sharedPaperPack; 

@end 

@implementation PaperPack 

+ (PaperPack *)sharedPaperPack 
{ 
    @synchronized(self) 
    {  
     if(!_sharedPaperPack) 
     { 

      _sharedPaperPack = [[[self class] alloc] init]; 

     } 
    } 
    return _sharedPaperPack; 
} 

+ (PaperPack*)paperPack { 
    self = [super init]; 
    if (self) { 
     [PaperPack sharedPaperPack].createdCount ++; 
    } 
    return self; 
} 

Чтобы использовать его:

Просто вызовите метод класса, который увеличит "createdCount" значение

PaperPack *firstPaperPack = [PaperPack paperPack]; 
PaperPack *secondPaperPack = [PaperPack paperPack]; 

и сосчитать:

NSInteger count = [PaperPack sharedPaperPack].createdCount; 

Извините, если что-то неправильно, код записывается из памяти

0

Вы также можете сделать следующее Метод 1

// PaperPack.h 
@interface PaperPack : NSObject 
+ (int)count; 
@end 

// PaperPack.m 
static int theCount = 0; 

@implementation PaperPack 
-(id)init 
{ 
    if([super init]) 
    { 
    count = count + 1 ; 
    } 
    return self ; 
} 
+ (int) count 
{ 
    return theCount; 
    } 
@end 

, когда вы хотите, количество объектов, созданных

[PaperPack count]; 

Метод 2

1) добавить свойство к вашему класс PaperPack.h

@property (nonatomic,assign) NSInteger count ; 

2) синтезировать его в PaperPack.m

@synthesize count ; 

3) изменить init метод

-(id)init 
{ 
    if([super init]) 
    { 
    self = [super init] ; 
    self.count = self.count + 1 ; 
    } 
    return self ; 
} 

4) если вы хотите, количество объектов, созданных

NSLog(@"%d",pack1.count); 
    NSLOg(@"%d",pack2.count);