Objective-C 快速導覽 - @class

介面 (interface) 中若需要用到其他類別 (class) 名稱,除了可先用 #import 直接引入標頭檔外,亦可用 @class 指令宣告可用的類別名稱。



我們的例子分成五個檔案,首先, Demo.h 如下
#import <Foundation/Foundation.h>

@interface Demo : NSObject {
    int a;
}

@property int a;

@end

/* 《程式語言教學誌》的範例程式
   http://pydoing.blogspot.com/
   檔名:Demo.h
   功能:Objective-c 程式範例
   作者:張凱慶
   時間:西元 2013 年 4 月 */


Demo.m 如下
#import "Demo.h"

@implementation Demo

@synthesize a;

@end

/* 《程式語言教學誌》的範例程式
   http://pydoing.blogspot.com/
   檔名:Demo.m
   功能:Objective-c 程式範例
   作者:張凱慶
   時間:西元 2013 年 4 月 */


Demo2.h 如下
#import <Foundation/Foundation.h>

@class Demo;

@interface Demo2 : NSObject {
    @public
    Demo *d;
}

@property (assign) Demo *d;

- (void) initDemo;

@end

/* 《程式語言教學誌》的範例程式
   http://pydoing.blogspot.com/
   檔名:Demo2.h
   功能:Objective-c 程式範例
   作者:張凱慶
   時間:西元 2013 年 4 月 */


Demo2.m 如下
#import "Demo2.h"

@implementation Demo2

@synthesize d;

- (void) initDemo {
    d = [[Demo alloc] init];
}

@end

/* 《程式語言教學誌》的範例程式
   http://pydoing.blogspot.com/
   檔名:Demo2.m
   功能:Objective-c 程式範例
   作者:張凱慶
   時間:西元 2013 年 4 月 */


測試檔案 classdemo15.m 如下
#import "Demo.h"
#import "Demo2.h"

int main (int argc, const char * argv[]) {
    NSAutoreleasePool * pool = [[NSAutoreleasePool alloc] init];

    Demo2 *d = [[Demo2 alloc] init];
    [d initDemo];
    d.d.a = 22;
    NSLog(@"%i", d.d.a);
 
    [pool drain];
    return 0;
}

/* 《程式語言教學誌》的範例程式
   http://pydoing.blogspot.com/
   檔名:classdemo15.m
   功能:Objective-c 程式範例
   作者:張凱慶
   時間:西元 2013 年 4 月 */


編譯執行,結果如下



中英文術語對照
介面interface
類別class


您可以繼續參考
類別


相關目錄
Objective-C 快速導覽
Objective-C 教材
首頁



參考資料
Programming with Objective-C: About Objective-C
Programming with Objective-C: Working with Objects

沒有留言: