2011-07-01から1ヶ月間の記事一覧

コレクションオブジェクトのnilについて

コレクションオブジェクト NSArray、NSDictionary、NSSet ではnilを格納することができません。nilが終端オブジェクトとして扱われているためだと思いますがエラーにさえなりません。 id k1 = @"k1"; id k2 = @"k2"; id k3 = @"k3"; id o1 = @"o1"; id o2 = …

Xcode4のTODOタグを警告に出力する

Xcode3以前ではTODO等のタグコメントでファンクションメニューに表示されていましたが、Xcode4からメソッド内でのTODOタグが拾われなくなりました。 !!!以外は、メソッド外ではちゃんと拾われるんですが、どうも挙動不審な感じなのでおそらくXcode4のバグか…

NSStringのpropertyはcopy属性にするべき

NSStringを引数にもつセッタのproperty定義で retainとcopyで議論がありますが、Google Objective-Cスタイルガイドでは copyを推奨しているようです。セッタではNSStringをコピーする(Google Objectieve-Cスタイルガイド 日本語訳) @interface Foo : NSObjec…

バージョンアップの判定

インストール直後やバージョンアップ直後の起動時にだけ行ないたい処理があります。例えば、データ移行処理や初期値設定処理などです。 アプリのバンドルバージョンの取得は下記のコードで取得できます。 [[NSBundle mainBundle] objectForInfoDictionaryKey…

ShadowOffsetのy座標について

「グラフィックスコンテキストに影を設定する CGContextSetShadow 関数の挙動が変わっている - 24/7 twenty-four seven」で紹介されていますが、iOS3.2以降からshadow関連のoffsetのy座標の正負が反転しました。 iOS3.1以前もターゲットに含めている場合は、…

iOSのバージョンの判定方法

SDKの挙動はバージョンによってガッツリに変わったりします。 その際にiOSバージョンを取得して判定する必要が出てきます。 UIDeviceからバージョン情報が取得できます。 NSArray *aOsVersions = [[[UIDevice currentDevice]systemVersion] componentsSepara…

実機の判定方法

実機の機種を判別したい時は次のコードでハードウェア名が取得できます。 struct utsname u; uname(&u); NSString *hardwareName = [NSString stringWithFormat:@"%s", u.machine]; ハードウェア名(hardwareName)と実機の組み合わせは下記の通りです。 ハー…

デバッグ用マクロの活用

デバッグ時のみにログを出力したい等、私の場合はプリプロセッサマクロの設定とifdefで切り分けるという原始的な方法で対応しています。具体的には Prefix.pchで色々な種類のマクロを定義し、DEBUGフラグで出力を制御するようにします。 プロジェクトのBuild…

サウンドアクションによるデバッグ

iOSの開発を行う上でメモリリークが非常に気になるところです。 Objective-Cの参照カウンタの仕掛けでいづれは開放されるとしてもdeallocが走るタイミングは検知しておきたいものです。 Xcodeには便利なbreakpointの機能が用意してあり、deallocの確認にオス…

URLスキーム名がバッティングしたアプリの挙動

1ソースを複数アプリとして公開する場合に気をつけなければならないことの一つにURLスキームがあります。通常はPro版、Free版とした場合でもURLスキームは分けるべきですが、申請時に分けるのを忘れて痛い目をみました。 実際にどうなるかというと、AppStore…

新たな道を模索して

7年間勤めてきた株式会社フライトシステムコンサルティングを退職しました。 専門的にサービスを技術も含め追求したいというのが大きな理由です。 当面はフリーランスエンジニアとして活動するつもりです。 フライトは元々、基幹業務開発を主に行っていたと…