We use two files on this program:
--------------
1. objc.m
2. GNUmakefile
--------------
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 | #import <Foundation/Foundation.h> // for Objectiv-C
#import <Foundation/NSObject.h>
#import <Foundation/NSString.h>
#import <stdio.h> // for C, there is no need to include this head file
// クラスの宣言
@interface MyTestClass : NSObject{
NSString *myTestString;
}
- (void) setMyTestString : (NSString *)testString;
- (void) printMyTestString;
@end
// クラスの実装
@implementation MyTestClass : NSObject
- (void) setMyTestString : (NSString *)testString{
myTestString = testString;
}
- (void) printMyTestString{
printf("myTestString is %s\n", [myTestString UTF8String]);
}
@end
// 実行プログラム
int main(int argc, char *argv[]){
NSAutoreleasePool *pool = [[NSAutoreleasePool alloc] init];
id obj1;
obj1 = [[MyTestClass alloc] init];
[obj1 setMyTestString:@"Objective-C, 我来自中国, from obj1"];
[obj1 printMyTestString];
[obj1 setMyTestString:@"Objective-C, 我來自中國, form obj1"];
[obj1 printMyTestString];
[obj1 setMyTestString:@"Objective-C, 私は中国から来ました, from obj1"];
[obj1 printMyTestString];
printf("\n");
MyTestClass *obj2;
obj2 = [MyTestClass alloc];
obj2 = [obj2 init];
[obj2 setMyTestString:@"Objective-C, 我来自中国, from obj2"];
[obj2 printMyTestString];
[obj2 setMyTestString:@"Objective-C, 我來自中國, form obj2"];
[obj2 printMyTestString];
[obj2 setMyTestString:@"Objective-C, 私は中国から来ました, from obj2"];
[obj2 printMyTestString];
[pool drain];
return 0;
}
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 | .SUFFIXES: .o .m
.m.o:
$(CC) -c $(CFLAGS) $<
PROG = objc
CC = gcc
CFLAGS = -g -Wall
FRAMEWORKS = -framework Foundation
SRC = objc.m
OBJ = objc.o
hist: $(OBJ)
$(CC) $(CFLAGS) -o $(PROG) $(OBJ) $(FRAMEWORKS)
.PHONY: clean
clean:
$(RM) $(PROG) $(OBJ) *~ a.out
objc.o: objc.m
|
objc.m の実行結果は:
[wtopia 1]$ ./objc
myTestString is Objective-C, 我来自中国, from obj1
myTestString is Objective-C, 我來自中國, form obj1
myTestString is Objective-C, 私は中国から来ました, from obj1
myTestString is Objective-C, 我来自中国, from obj2
myTestString is Objective-C, 我來自中國, form obj2
myTestString is Objective-C, 私は中国から来ました, from obj2
@interface, @implementation には, @ で始まる記述が用意されている. これをコンパイラディレクティブと呼ぶ.
Objective-C 言語では, クラスの宣言と実装は分けて記述する:
@interface ではクラスを宣言し, そのクラスがどんな変数やメソッドを保存しているかを示す.
@implementation ではメソッドの具体的な処理内容を実装する.
Objective-C では, オブジェクト型の変数を宣言する場合, id という共通のデータ型が利用できる. (どんなクラスのオブジェクトでも保存できる便利なデータ型).
もちろん, クラス名を明示して:
クラス名 *変数名
と記述することもできる.
Objective-C ではメッセージ式, [obj method] を利用する, C++ や Java などでは, obj.method() を利用する.
Cocoa は, 実際に複数のフレームワークを含んでいる. その中心となるのは, Objective-C の基本中の基本である Foundation フレームワークと, GUI を表現する Appkit フレームワーク.