Ios 获取自定义类的实例数
我在xcode中创建了一个自定义类: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
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);