ラベル Objective-C の投稿を表示しています。 すべての投稿を表示
ラベル Objective-C の投稿を表示しています。 すべての投稿を表示

2011年5月2日月曜日

Objective-Cを学ぶ

以前Objective-Cについて書きましたが、
改めてObjective-Cの書き方をざっとまとめてみます。
下記がわかれば、だいたいソースコードを読めるのではないかと・・・自身ないけど。

.hファイル
@interface クラス名 : 親クラス名 {
    int member1;
    (メンバ変数)
}
- (返り値)メソッド1;
- (返り値)メソッド2:(引数型)引数
- (返り値)メソッド3_1:(引数型)引数1 メソッド3_2:(引数型)引数2
@end
.mファイル

@implements クラス名
- (返り値)メソッド1
{
  メソッド1の処理
}

- (返り値)メソッド2:(引数型)引数
{
  メソッド2の処理
}

- (返り値)メソッド3_1:(引数型)引数1 メソッド3_2:(引数型)引数2
{
  メソッド3の処理
}
@end

メソッドの呼び出しは、
[オブジェクト名 メソッド名:引数];
です。

他には、
ヘッダーの読み込み(includeではなくimport)
#import <UIKit/UIKit.h>
他の場所で定義されたクラスの名前
@class クラス名
があります。

また、アクセッサとして、.hに
@property (nonatomic, retain) UIWindow *window;
.mに
@synthesize window;
と書けば、getter/setterメソッドを自動生成してくれます。


@property (nonatomic, retain) UIWindow *window;
の nonatomic は atomicじゃないので、非同期処理は対応しない、 retainは代入したときに参照カウントを1増やして解放されないようにする、っていう意味っぽいです。

2009年8月3日月曜日

はじめてのObjective-C

意味はないけどムシャクシャするので、
Objective-Cでコードを書いてみた。
いや、別にムシャクシャはしていないけど。

ということで、helloWorldを。

hello.m
#import 
#import 

@interface TestClass : Object
  - (void) getMessage;
@end
hello.m

#import "hello.h"

@implementation TestClass
  - (void) getMessage {
  printf("Hello Objective-C World\n");
}
@end

int main(int argc, char *argv[])
{
  id obj = [ TestClass alloc ];
  [ obj getMessage ];

  return 0;
}

Ojbective-Cは @interface で、クラスの定義を行い、@implementationでクラスの実装を行う。

サンプルでは、- (void) getMessage;というメソッドを@interfaceで定義し、@implementationで実装している。 "-"はインスタンスメソッドと言う意味。

一応C言語なので、Cの標準ライブラリをimportすれば使用できる。

で、メソッドの呼び出しは[]で行う。

Objective-Cはsamlltalkと同じメッセージ形式なので、[obj getMessage]は、objに対してgetMessageというメッセージを送信しています。
allocはNewと同じ。

Linuxでのコンパイルは
$gcc -v -Wall -Os -o hello  hello.m -lobjc
とする。-lobjcというのが必要なんですな。

しかし、Objective-Cとかいっても、これじゃどう見てもC言語には見えませんな。