Получить количество экземпляров пользовательского класса

Я создал собственный класс в xcode: PaperPack и определил 2 мгновенные переменные: title и author-

Затем я выделяю 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";

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


person fahrulazmi    schedule 25.07.2013    source источник
comment
@Wain Мне нужно передать номер другому классу.   -  person fahrulazmi    schedule 25.07.2013


Ответы (4)


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

Пример:

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]);
person Nishant Tyagi    schedule 25.07.2013
comment
В его случае может быть лучше (если ему нужно только количество экземпляров), например, сохранить экземпляр int вместо NSMutableArray. Как решение @Wain. - person Javito_009; 25.07.2013

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

person Wain    schedule 25.07.2013
comment
+1, если вам нужно просто число... подсчет... У вас не должно быть массива экземпляров - person Injectios; 25.07.2013
comment
Синглтон... лучшие практики в лучшем виде - person madLokesh; 25.07.2013

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;

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

person Injectios    schedule 25.07.2013

Вы также можете использовать следующий метод 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);
person Subbu    schedule 25.07.2013