S eda1a14b50ee24bcab19b62f40858e76 Objective-C

C言語を拡張したもの。Cocoaはフレームワークの名称。

文字列

NSString* str = @"Hello World";
Ruby, PHPとの文字列操作比較
http://d.hatena.ne.jp/hetima/20061025/1161...

デバッグ

NSLog(@"obj = %@", obj); // オブジェクトの場合 %@

foreach

NSArray *array = [NSArray arrayWithObjects:@"A", @"B", @"C", nil];
for (id i in array) {
  //なんか処理
}

NSDictionary *dictionary = [NSDictionary dictionaryWithObjectsAndKeys:
    @"value1", @"key1",
    @"value2", @"key2",
    @"value3", @"key3",
    nil
  ];
// キーでループする場合
for (id i in [dictionary keyEnumerator]) {
  // なんか処理
}
// 値でループする場合
for (id i in [dictionary objectEnumerator]) {
  // なんか処理
}

enum

C言語にもあるんな。
typedef enum{
  Left = -1,
  Right = 1
} Direction;
// 自動的にintになる?

Blocks

Rubylist歓喜。こんなことができるらしい
http://blog.livedoor.jp/faulist/archives/1...
http://blog.livedoor.jp/faulist/archives/1...


instanceof

NSObjectが定義してる isKindOfClass を使う
if ([obj isKindOfClass:[NSString class]]){
  ...

メモリ管理

・allocしたらrelease、retainしたらrelease
・releaseの代わりにautoreleaseもあるよ
・他の人が生成したやつには関わるな!
・@property(retain)は自動的にretain/releaseする
・delegateはretainするな。多くの場合循環参照になる

クラス

だいたいこんな感じ。インスタンス変数は@interfaceに定義します。
// Hoge.h
@interface Hoge{
 @private
  NSString* name;
}
- (void) say;
@end

// Hoge.m
@implementation Hoge
- (void) say{
  NSLog(name);
}
@end

継承

// NSObjectを継承
@interface Hoge : NSObject{
}
@end

プロトコル

Javaでいうインタフェース
@protocol Speakable
- (void) say;
@end

// 「実装する」とは言わず、「プロトコルに適合する」という
@interface Hoge : NSObject
- (void) say;
@end

カテゴリ

メソッドのグループ化。これができるのはそもそもメソッドの動的追加ができるということ。インスタンス変数は追加できない。
@interface Hoge(Extension)
- (void) jump;
@end

この機能を使って非形式プロトコルというのが使える。その方法はNSObjectにメソッドを追加するだけ。そんなことやってもいいの?とすごく疑問に思うんだが...。コンパイラを通るためならしかたないのか。

メソッドの動的呼び出し

SEL hogeMethod = @selector(say);
[hogeObj performSelector:hogeMethod];

NSNull

NSDictionary, NSArrayにnilは格納できない。NSNullを使う。
[dict setObject:[NSNull null] forKey:@"hoge"];

[NSNull null]はシングルトンっぽい。==比較でOK
if (val == [NSNull null]){
 ...
}


まだよくわかっていないこと

・intよりNSUInteger使った方がいいんだろうか

Google Objective-Cスタイルガイドのまとめ

http://www.textdrop.net/google-styleguide-...

・インデントは2スペース
・変数名、クラス名、メソッド名はCamelCase。クラス名は大文字開始
・hoge の setter は setHoge だが、getter は getHoge ではなく hoge
・クラスメンバ変数はアンダースコア(_)で終わること。myInstanceVariable_
・定数名(#define、enum、constなローカル変数など)は小文字k開始のCamelCase。kConstValue
・@interfaceのコメントは必ず書く。パブリックメソッドについては機能、引数、戻り値、あらゆる副作用について説明する
・コメント中に変数名を入れる場合は |val| な感じで書く
・メンバ変数は @private にすべきだ
・イニシャライザを明確にする
・0やnilに初期化するのは冗長
・プライベートメソッドとパブリックメソッドの区別はない
・続きはあとで読む。。。

参考


最速マスター
http://d.hatena.ne.jp/fn7/20100203/1265207098

Google Objective-Cスタイルガイド 日本語訳
http://www.textdrop.net/google-styleguide-...

Cocoa
http://wwwa.dcns.ne.jp/~nito/CocoaClub/

もしかして

    他の人の「Objective-C」

    S eda1a14b50ee24bcab19b62f40858e76

    無所属ソフトウェアエンジニア

    (1722words)

    最新

      最新エントリ

        関連ツイート