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--; } @endmain
#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