3

我在 xcode 中创建了一个自定义类:PaperPack并定义了 2 个即时变量:titleauthor-

然后我分配类的 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";

那么我如何计算并返回我使用该类创建的实例数?

4

4 回答 4

5

您可以创建一个工厂单例,用于计算请求的实例数(然后您必须使用工厂创建所有实例)。或者您可以static在类中添加一个变量PaperPack并每次递增(在init方法中,您必须init每次都调用)。

于 2013-07-25T06:50:52.490 回答
0

不,你不能直接得到。每当您在实例中创建时添加任何数组,然后使用该数组属性访问它。

前任 :

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]);
于 2013-07-25T06:50:37.243 回答
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;

抱歉,如果有错误,代码是从内存中写入的

于 2013-07-25T07:22:05.157 回答
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];

方法二

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);
于 2013-07-25T07:22:15.330 回答