Home > Prog > Objective C Archive

Objective C Archive

OAuthのFramework for Objective-C

iPhoneアプリ勉強会をしたい

学内でiPhoneアプリの勉強会をしようと誘われるも、私を含めて2人しかいない。

そもそもMacユーザがいない。みんなMacBookを買うのだ!

Objective-Cは面白い言語だから、今日の授業中にでも荻原本を読もう。

早くiPhoneアプリを作りたいおっお・・・

メソッドを実行時に決定できる

面白い

詳解Objective-C 2.0 p.149


SEL method = (cond1) ? @selector(activate:) : @selector(hide:);

id obj = (cond2) ? myDoc : defaultDoc;

[target performSelector:method withObject:obj];

cond1によって、activate メソッド実行するか、hide メソッドを実行するかが決まる。

この2つのメッセージ式は同じ処理をするらしい


[target description];

[target performSelector: @selector(description)];

ただし、存在しないセレクタを指定してもコンパイラはエラーを吐かない。
そのメッセージのレシーバとなるオブジェクトは動的に決定されるから。

ガーベジコレクションを使う

Objective-Cでガベージコレクションを使う場合、以下のコンパイルオプションが必要

-fobjc-gc ガーベジコレクション+カウンタ管理方式を使う場合
-fobjc-gc-only ガーベジコレクションのみを使う場合(推奨)

Objective-Cでもするか

iPhoneのアプリ作りたいし、Objective-Cでもするか。
言語に慣れるまでがきつい。早くCocoa使いたいなぁ

シグネチャが異なる場合

シグネチャ・・・セレクタと型情報を合わせたもの

- (id)cellAtRow:(int)row column:(int)col;

原則:同じセレクタを持つメッセージは引数や返り値の型(シグネチャ)は同じにすべき

チェックの仕方(-Wallオプションはだめ)
コンパイル時に
-Wstrict-selector-match
オプションをつける。

Objective Cはおもしろい!

Objective Cのプログラム書いてるけど、オブジェクト同士がまさに対話しているかのようだ。
【ダウンロード】 詳解 Objective-C 2.0
上記のURLでソースを落とせるみたい。

#import <stdio.h>
#import <Foundation/NSObject.h>

@interface Volume : NSObject
{
  int val;
  int min, max, step;
}

- (id)initWithMin:(int) a max:(int)b step:(int)s;
- (int)value;
- (id)up;
- (id)down;
@end

@implementation Volume
- (id)initWithMin:(int)a max:(int)b step:(int)s
{
  self = [super init];
  if (self != nil) {
    val = min = a;
    max = b;
    step = s;
  }
  return self;
}

- (int)value
{
  return val;
}

- (id)up
{
  if ((val += step) > max)
    val = max;
  return self;
}

- (id)down
{
  if ((val -= step) < min)
    val = min;
  return self;
}
@end

int main() {
  id v, w;

  v = [[Volume alloc] initWithMin:0 max:10 step:2];
  w = [[Volume alloc] initWithMin:0 max:9 step:3];
  [v up];
  printf("%d %d\n", [v value], [w value]);
  [v up];
  [w up];
  printf("%d %d\n", [v value], [w value]);
  [v down];
  [w down];
  printf("%d %d\n", [v value], [w value]);
  return 0;
}

windows:objc yup$ gcc -framework Foundation volume.m
windows:objc yup$ ./a.out
2 0
4 3
2 0

Home > Prog > Objective C Archive

Search
Feeds
Meta

Return to page top