Labs

<< 最初 < 前ページ 次ページ > 最後 >>
icon Objective-C 基礎編 Vol4 (2010/05/10)
音楽やってる時間がないとはいえ、今月は1本、来月は2本(?)演奏があったり。
結局、色々と思うようには進まず。。。

■アプリケーションデリゲート
OOP用語でいう「委譲」のGoFデザインパターンの1種
Facadeパターンと同じで、複数のクラスを1つにまとめた(見せかけ)て利用する。

Appleのドキュメントには、以下のように記載されている。

アプリケーションの上位レベルの動作を監視するのは、
デベロッパが提供するカスタムオブジェクトである、アプリケーションデリゲートオブジェクトの責任です。
デフォルトのUIApplicationオブジェクトなどの複雑なUIKitオブジェクトのサブクラス化を避けるために使用されるメカニズムです。



UIkitの面倒な処理を、一任できるようだ(という言い回しは曖昧だw)
#import <UIKit/UIKit.h>

@class UntitledViewController;

@interface UntitledAppDelegate : NSObject <UIApplicationDelegate> {
    UIWindow *window;
    UntitledViewController *viewController;
}

@property (nonatomic, retain) IBOutlet UIWindow *window;
@property (nonatomic, retain) IBOutlet UntitledViewController *viewController;

@end
基本的にX-codeでプロジェクトを選ぶと自動生成してくれるので、
あまり意識するクラスではないかもしれないのかな?

ただ、アプリケーション固有の実装が必要になった時に、
本質を理解しておく必要はあるかも知れない。
今は、あまり深く追求せずに先へ進もうw

ちなみに、ソースのUIApplicationDelegateの上で、option + ダブルクリックすると「UIApplicationDelegate.h」のソースを見る事ができ、
iPhoneOSに特化した面倒くさい宣言が数々記述されている。

■InterfaceBuilderのショートカット
コマンド + 1 : Attributes
コマンド + 2 : Connections
コマンド + 3 : Size
コマンド + 4 : Identity

■RoundButtonのタッチイベント
ボタンクリックのイベントは、ボタン内で指を離す「Touch Up Inside」が基本。
これはiPhone特有かな?と思ったけど、考えてみればブラウザやその他アプリケーションも、「Click」ではなく「Click Up Inside」の動作をしている気がする。


icon Objective-C 基礎編 Vol3 (2010/05/05)
実家では、仕事場(商売屋なので)に行かないとネット使えないけど、部屋の場所によっては、無線LANのフリースポットが微妙に入ったり。
なんで、電波入るピンポイントを探してネットしてます(^^;) さて、続き

■*(アスタリスク)
個人的にObjective-Cで違和感がある書き方に「*(アスタリスク)」がある。
いわゆるC言語でいうポインタ。

自分はC言語はちゃんとやったことないので、それが違和感の原因かもしれないw
Webのオブジェクト指向プログラムでは、無意識にポインタ(参照)コーディング しているからであろう。

NSString *インスタンス名 = [[NSString alloc] initWithFormat:@"%@ xxxxxxx", ];


・クラスオブジェクト型のインスタンス変数は、「*」を付けて宣言 ・id型の場合は、「*」なしで宣言可能

■アクセス修飾子
@private 
int test1;
int test2;
@protected 
int test3;
@public 
int test4; 
int test5; 

・アクセス修飾子private、protected、publicは「@」ディレクティブとして宣言
・Objective-Cのデフォルトはprotected
・次のディレクティブまたはリストの終わりまでの間に記述されたインスタン
ス変数に適用
・packageは64bitのみ


参考: Objective-C 2.0プログラミング言語:クラス実装
Objective-Cのアクセス制限とJavaのアクセス修飾子を比較してみる

これもちょっと違和感と言うか、パッとみわかりにくい気がする。
Java等はインスタンス変数の修飾子は1行で明示的にするのが作法なので、


@private int test1;
@private int test2;
@protected int test3;
@public int test4; 
@public int test5; 
あぁ、でも最初の方が合理的でいいのかな?(^^;)
あと、クラス自体のアクセス修飾子ってどうなんだろうか?
また機会がある時に調べないと。。。

■メッセージネスティング
これが、Objective-Cの「わかりにくさNo1」と個人的に思っていたり・・・。

NSString *インスタンス名 = [[NSString alloc] initWithFormat:@"%@ xxxxxxx", ];


これはよく出てくるコーディング。
alloc、init等は、新旧問わず暗黙的にネストして記述するようなので慣れるしかない。
--2010/07/17追記--
・alloc:メモリ確保
・init:初期化(NSObjectのメソッド)
メモリ管理によると、初期化のメッセージングを連続して書かないとnilを返す可能性があるとのこと。

オブジェクトを安全に初期化するには、割り当ておよび初期化メッセージを 1 行のコードに結合することが推奨されている。
------

ただ、以下のようにネストされるとやはり思考を停滞させられる。

[NSString stringWithFormat:@"%@ xxxxxxx", [sendertitleForState:UIControlStateNormal]];


個人的には「行数をただ減らせば良いってもんじゃない」と、「わかりやすさ重視派」なので。
(多分どの言語でもネストは悪だと思うんだけどねえ)

まぁ、コードって本当にその人の性格や思考回路が出ますねw
icon Objective-C 基礎編 Vol2 (2010/05/04)

実家に帰ってます。 てか、家の鍵が・・・色んな事に気を取られてダメダメです(^^;) えっと、ビックカメラで書籍買いました。 流石ブームだけあってかなり豊富(ネットだともっとあるんだけど)
・「はじめてのIphone3プログラミング」 まだ触りだけど、Objective-Cの新旧のコトなど突っ込んであって、深く理解するには感じかも?
・「そのまま使えるiPhoneゲームプログラミング

まだ全然読んでないけど、実用的なサンプルとOpenGL ESの勉強のために。 まずは、「はじめてのIphone3プログラミング」から。

Objective-C2.0からは、プロパティのアクセサメソッドを 自動生成させるためのコンパイラディレクティブが導入された。
Objective-Cが分かりにくいと言うカラクリは、コーディングを減らした結果にあるかも知れない。 今回は、アクセッサメソッドの基本について。

■@synthesize アクセサメソッド生成部分


@synthesize インスタンス,...;

■@property アクセサメソッド宣言部分
@property (nonatomic, retain) IBOutlet UIクラス *インスタンス
@property (assign) NSString *インスタンス;
@property (retain, readonly) NSString *インスタンス;
まずはよく出てくるセット

・nonatomic:マルチスレッド環境でオーバーヘッドを軽減。 複数のスレッドから同時に読み込み時の動作保障しない。 デフォルトはatomicだが属性なし。
・retain:オブジェクトのメモリを勝手に解放しない



その他、

・assign:インスタンス変数に単純に代入
・copy:インスタンス変数に引数をコピー
・readonly:getterのみを生成
・readwrite:setter、getter両方を生成(デフォルトで省略)



アクセッサーの処理を普通にコーディングすると、面倒なコードを書かなくて済む。<
- (id) foo {
    return foo;
}
- (void) setFoo:(id) aFoo {
    if (aFoo != foo) {
        [aFoo retain];
        [foo release];
        foo = aFoo;
    }
}

■ (id) sender InterfaceBuilder
- (IBAction) UIクラス:(id) sender

idはUIオブジェクトの「id」そのまま。
で、senderって何かの決まりと思ってたら、単なる引数名のことだった。

「センダー」と言う呼び名から、「sender」と書かれているサンプルが多い。
--2010/07/17追記--
いやいや、senderはUINibDeclarations.hのプロトコルのようです。
この通り記述しないとコンパイルエラーになります(^^;)
--2010/07/20追記--
またまた、間違い?
この前実装した時は、sender以外だとエラーになった(気のせい?)けど、今やったら普通に動く。。。
まぁ、混乱しない為にもsenderでいいと思う。

luvtechno
iPhone開発とかの備忘録。

なんだから覚える事が多いけど、実際何が行われているか?を理解しないと、 先に進めないので頑張らないと(^^;)
<< 最初 < 前ページ 次ページ > 最後 >>

このサイトについて

HTML5 & CSS3化しつつあるので、現在IEには対応してません。
できれば、Google Chromeやら Apple SafariのWebKit系をお勧めします。

DBからプログラムまで一応全て自作なので、バグってたらすいません。
実験でFlash版(Flex版)を先に作りましたが、ちょっと停止してます。

プロフィール

新宿近辺でSE & プログラマーしてます。
Webアプリの開発・設計とか、最近はiPhoneとか奮闘してます。
デザインはさっぱりです。

音楽は、昔からCubase打ち込み人間で、そっちの方が経歴は長いですが、最近はやる暇がないです。。。

今は、Gon's Privates ってバンドのキーボードやってます。
単発的に、なんちゃってジャズ系のライブもやってます。

名古屋生まれなのでドラゴンズ好きです。

Info && SNS

Gmail

 yohei.yoshikawa@gmail.com

Twitter

 http://twitter.com/yoo_yoo_yoo

あんまつぶやきませんが、一応技術系メインで使ってます。情報交換はこちらへ

FaceBook

 http://www.facebook.com/#!/profile.php?id=1439130626

海外の知り合いがいないので閑散としてます。

mixi

 http://mixi.jp/show_profile.pl?id=230072

音楽仲間とかはこっちメインでやってます。興味があればこちらへ