【发布时间】:2011-04-30 11:18:53
【问题描述】:
我在下面尝试这个示例程序。
我没有在 B 类中调用 +(void)initialise 和 -(id)init 方法,而是自动调用它。
-(void)initialise 是否等于目标 C 中的默认构造函数。
[super init] 是否指向 NSObject。
如果我没有使用 -(id)init 方法,我会收到一个警告,指出该类的实现不完整。
ClassA.h
#import <Foundation/Foundation.h>
static int ab;
@interface ClassA : NSObject {
int a;
}
+ (void) initialize;
- (id) init;
- (void) displayNumOfInstance;
- (void) disp;
@end
ClassA.m
#import "ClassA.h"
@implementation ClassA
+ (void) initialize
{
ab=0;
}
- (id) init
{
self = [super init];
if (self!=nil) {
ab++;
}
return self;
}
- (void) displayNumOfInstance
{
NSLog(@"Number of instances of this class:%d",ab);
}
- (void) disp
{
NSLog(@"The value is %d",ab);
}
@end
ClassB.h
#import <Foundation/Foundation.h>
#import "ClassA.h"
@interface ClassB : ClassA {
}
- (void) display;
@end
ClassB.m
#import "ClassB.h"
@implementation ClassB
- (void) display
{
ab=20;
NSLog(@"The value ab is %d",ab);
}
@end
class2.m
#import <Foundation/Foundation.h>
#import "ClassA.h"
int main (int argc, const char * argv[]) {
ClassA *a = [[ClassA alloc]init];
[a disp];
[a release];
ClassB *b = [[ClassB alloc]init];
[b display];
[b release];
ClassA *a1 = [[ClassA alloc]init];
[a1 disp];
[a1 release];
ClassB *b1 = [[ClassB alloc]init];
[b1 display];
[b1 release];
return 0;
}
输出:
2011-04-30 15:31:42.490 class2[1674:a0f] 1
2011-04-30 15:31:42.493 class2[1674:a0f] The value ab is 20
2011-04-30 15:31:42.494 class2[1674:a0f] 2
2011-04-30 15:31:42.495 class2[1674:a0f] The value ab is 20
【问题讨论】:
标签: objective-c