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