Toy.h
#import <Foundation/Foundation.h>
@interface Toy : NSObject
{
NSString *name_;
}
@property (nonatomic,retain)NSString *name;
+(int)currentToyNumber;
@end
Toy.m
#import "Toy.h"
static int toyNumber;
@implementation Toy
@synthesize name = name_;
-(id)init
{
self =[super init];
if (self) {
toyNumber++;
}
return self;
}
+(int)currentToyNumber
{
return toyNumber;
}
-(void)dealloc
{
toyNumber--;
}
@end
main.m
#import <Foundation/Foundation.h>
#import "Toy.h"
int main(int argc, const char * argv[])
{
@autoreleasepool {
//新增一個Toy
Toy *toyA = [[Toy alloc]init];
[toyA setName:@"Apple"];
NSLog(@"Add toy, currentToyNumber: %d",[Toy currentToyNumber]);
//再新增一個Toy
Toy *toyB = [[Toy alloc]init];
[toyB setName:@"Banana"];
NSLog(@"Add another toy, currentToyNumber: %d",[Toy currentToyNumber]);
//刪除一個Toy
toyA = nil;
NSLog(@"Delete apple, currentToyNumber: %d",[Toy currentToyNumber]);
}
return 0;
}
Output的結果如下:Add toy, currentToyNumber: 1
Add another toy, currentToyNumber: 2
Delete apple, currentToyNumber: 1
用extern改寫,範例如下,其實是用全域變數,已經跟class variable含意不同了。
Toy.h
#import <Foundation/Foundation.h>
extern int currentToyNumber;
@interface Toy : NSObject
{
}
@end
Toy.m
#import "Toy.h"
@implementation Toy
-(id)init
{
self = [super init];
if (self) {
currentToyNumber++;
}
return self;
}
-(void)dealloc
{
currentToyNumber--;
}
@end
main#import <Foundation/Foundation.h>
#import "Toy.h"
int currentToyNumber = 0;
int main(int argc, const char * argv[])
{
@autoreleasepool {
NSLog(@"CurrentToyNumber : %d",currentToyNumber);
Toy *toyA = [[Toy alloc]init];
NSLog(@"CurrentToyNumber : %d",currentToyNumber);
Toy *toyB = [[Toy alloc]init];
NSLog(@"CurrentToyNumber : %d",currentToyNumber);
toyA = nil;
NSLog(@"CurrentToyNumber : %d",currentToyNumber);
}
return 0;
}
輸出結果:CurrentToyNumber : 0
CurrentToyNumber : 1
CurrentToyNumber : 2
CurrentToyNumber : 1