Ios 获取自定义类的实例数

Ios 获取自定义类的实例数,ios,objective-c,instance,counter,multiple-instances,Ios,Objective C,Instance,Counter,Multiple Instances,我在xcode中创建了一个自定义类:PaperPack,并定义了两个即时变量: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.au

我在xcode中创建了一个自定义类:
PaperPack
,并定义了两个即时变量:
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";

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

不,您无法直接获取。无论何时在实例中创建,请将其添加到任何数组中,然后使用该数组属性访问它

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]);

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

要使用它:

只需调用将增加“createdCount”值的类方法

并计算:

NSInteger count = [PaperPack sharedPaperPack].createdCount;

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

您还可以执行以下操作 方法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);

@Wain我需要将数字传递给另一个类。例如,在他的情况下(如果他只需要实例的数量),最好保留一个int实例,而不是NSMutableArray。比如@Wain solution.+1,如果你只需要一个数字。。。计数您不应该拥有InstanseSessingleton阵列……最佳实践
-(id)init
{
  if([super init])
   {
     self = [super init] ;
     self.count = self.count + 1 ; 
   }
   return self ;
}
  NSLog(@"%d",pack1.count);
   NSLOg(@"%d",pack2.count);