Hatena::Diary

sugarbabe335の記録 RSSフィード

2008-08-17

cocoaの勉強をしてみる。

| 16:34 | cocoaの勉強をしてみる。 - sugarbabe335の記録 を含むブックマーク はてなブックマーク - cocoaの勉強をしてみる。 - sugarbabe335の記録

cocoaの基本を知りたいのでチュートリアルをやってみた。

で参考されていた下記を読んだ。

とりあえず上のでobjective-cの寒気のする文法には対処できるようになったかもしれない。

appleのチュートリアルでどうしても、それ通りにはいかなかったところが一点。

nibファイルにcontrollerを登録する方法で

「File」>「Read Class Files」を選びます。

ConverterController.hファイルを選択して「開く」をクリックします。

とあるが、これだと何も反応がない。

なので、ライブラリからObject(青いやつ)をMainMenu.nibにドラップし、InspectorからIdentity(インフォメーションマーク)を選び、Class Identityで自分で選んでやる必要があった。後はチュートリアル通りで大丈夫。



前者のObjective-c入門をやったときのMEMO


@interface hoge

{

インスタンス変数宣言

}

メソッド宣言

@end

でインスタンス変数、メソッド名を記述する。

  • (void)hogeはインスタンスメソッド
  • hogeはクラスメソッド

@implementation hoge

メソッド定義

@end

objective-cではクラスの宣言と定義が完全に分離されている。

インスタンス化;javaでいうnewは+allocに宣言する。+はクラスメソッド。

allocメソッドではid型が返ってくる。あらゆるオブジェクトが入る型

@interface Hoge : Object//継承

  • (void)fuga

@end

@implementation Hoge

  • (void)fuga{

printf("fugafuga\n");

}

@end

int main() {

id hoge = [Hoge alloc];

[hoge fuga];

return 0;

}

[クラス名 メソッド名:引数リスト]で呼ぶ。

allocメソッドはObjectに定義されていて継承している。

クラスの宣言はヘッダファイル(@interface)

定義(@implementation)はクラス名と同じ~~.mに記述

インスタンス変数はデフォルトがprivateになってる?publicではなさそう。

  • (戻り型)メソッド名:(引数型)変数名 ラベル:..

ラベルがどこにかかるのかが、よくわからない。

  • (void)setPoint:(int)ptx int:(int)pty;

intはptx、ptyどっちにかかってるの?なんでラベル一個なの?謎

self->x = this.x

継承は

@interface Hoge :Object

@end

@interface subHoge : Hoge

@end

コンストラクタというものがないらしい。

  1. new
  2. init

を使う

  • (id)init {

[super init]

x=0

return self

}

int main(){

id hoge = [Hoge new];

return 0;

}



  • (id) init {

[super init]

return [self initHoge:0 init: 0];

}

  • (id) initHoge:(int)x int:(int)y {

self->x = x;

self->y = y;

return self

}

と書ける。

id hoge = [Hoge new];

id hoge2 = Hoge alloc] initHoge:3 int:3];

freeでメモリ解放



@implementation Hoge

...

@end

int main(){

Hoge * hoge = [Hoge new]

return 0;

}

ポインタを使ってidのように動的にクラスの型を決めない。静的に決める。


@interface Hoge : Object

{

@public

int x;

@protected

int y;

@private

int z;

}

@end

と出来る。

hoge->xみたいな感じで呼ぶ。

classメソッドの使い方が不明。

javaでいうinterfaceは@protocol

@protocol Fuga

@end

@interface Hoge : object < Fuga>

@end

トラックバック - http://d.hatena.ne.jp/sugarbabe335/20080817/1218958477