#topicpath

//////////////////////////////////////////////////////////////////////////////
* 目次 [#bd4ea116]
#contents();

//////////////////////////////////////////////////////////////////////////////
* 文法 [#ad8bcbfd]

//============================================================================
** class 宣言 [#d8957ea1]
- C++, Java で言うところの class に相当するもの
- &color(red){''@interface'' クラス名 [: 親クラス名]}; で始まり、 &color(red){''@end''}; で終わる

 @interface MyClass : SuperClass  // コンパイラディレクティヴの開始
 - (TYPE)InstanceMethod: 仮引数リスト ;   // インスタンスメソッド
 + (TYPE)Method: 仮引数リスト;            // メソッド
 @end

//----------------------------------------------------------------------------
*** インスタンスメソッド [#g574affc]
- &color(red){''-''}; で始まる
- 返り値型は、 ''-'' に続いて &color(red){''(TYPE)''}; で示される。
-- 返り値を持たない場合は (void) で明示する。
-- 返り値型を明示しなかった場合のデフォルトは、 Objective-C で定義されている &color(red){''id''}; 型と解釈される。

//----------------------------------------------------------------------------
*** メソッド [#ca0c9651]
*** クラスメソッド [#ca0c9651]
- &color(red){''+''}; で始まる
- クラスメソッドにはインスタンスが存在しないため、暗黙の self オブジェクトを使うことは出来ない

//============================================================================
** class の実装 [#x164eac8]
- ここでもコンパイラディレクティヴ &color(red){''@''}; によって括られる。
- class の実装は、 &color(red){''@imprementation''}; と &color(red){''@end''}; で括られた中に実装される。

 @imprementation MyClass : SuperClass
 - (TYPE)InstanceMethod: 仮引数リスト {
     // インスタンスメソッドの実装
 }
 
 + (TYPE)Method: 仮引数リスト {
     // メソッドの実装
 }
 @end

//============================================================================
** class instance の生成 [#wab45d07]
- class instance を生成する場合には、そのクラスの alloc を呼び出す。
- 下記の例では、クラス MyClass のインスタンスを生成し、 id 型の変数 obj に格納している。
 id obj = [ MyClass alloc ]
-- alloc メソッドは、Objective-C の全ての class の親クラスとなる Object ルートクラスに定義されており、これを呼び出すことで MyClass 型として適切にメモリを割り当てられる。
- class を、メソッドを1回呼んで使い捨てにする場合は、下記のような呼び出し方も可能である:
 [[MyClass alloc] MyMethod]

//============================================================================
** メソッドの呼び出し [#j1606910]
- メソッドの呼び出しは、
 id obj = [ MyClass alloc ];   // class instance を生成し、変数 obj に格納
 [ obj Method ]; // obj に割り当てられた class が持つメソッド Method を呼び出し



//////////////////////////////////////////////////////////////////////////////
* Links [#vc35abbb]
- [[Nito's Page>http://wwwa.dcns.ne.jp/~nito/]]
- [[Objective-C入門>http://wisdom.sakura.ne.jp/programming/objc/index.html]]
- [[【コラム】ダイナミックObjective-C (1) CocoaとObjective-Cと動的なオブジェクト指向 - Cocoaハックの第1歩 | エンタープライズ | マイコミジャーナル>http://journal.mycom.co.jp/column/objc/001/]]
- [[Objective-Cは特殊な言語? - @IT>http://www.atmarkit.co.jp/fcoding/articles/objc/objc01/objc01a.html]]

//////////////////////////////////////////////////////////////////////////////
* 必要なパッケージ(Debian) [#v0139ef9]
 gobjc
 gobjc++ (Objective-C++を使う場合)


//============================================================================
** GCC の場合 [#y2f81349]
- 古いMakefileの記法が必要になる:
 .SUFFIXES: .m
 .m.o:
         $(CC) -c $(CFLAGS) $<

- クラスを使ったコードは、リンクするときに、libobjc が必要。
- Foundation/NSObject.hをimportしてコンパイルすると...
 "error: Foundation/NSObject.h: No such file or directory"
というようなエラーが出てしまう。この場合は、libgnustep-base-dev パッケージをインストールすると解決する。
 # aptitude install libgnustep-base-dev
その他、入れた方が良いかもしれないもの:
 # aptitude install libgnustep-base-dev
 # aptitude install gnustep
 # aptitude install gnustep-devel

トップ   編集 差分 履歴 添付 複製 名前変更 リロード   新規 一覧 検索 最終更新   ヘルプ   最終更新のRSS