Objective-CなどiOS関連の技術メモ。知識はここに投げ捨てて忘れる。

最終更新日 2013年07月21日 12:42

NSOperationの解説にはすこし混乱があり紛らわしい部分がある。

最終更新日 2013年07月21日 12:42

ブロック内からブロック外の自動変数(selfを含む)を利用すると、ブロックからその変数(が指すオブジェクト)への強い参照が生まれる。

ありがちなのは、あるクラスのインスタンス変数として保持されているブロックが、自分を保持しているオブジェクトのインスタンス変数にアクセスしようとするケース。インスタンス変数へのアクセスは、暗黙的にselfを利用しているので、selfへの強い参照が生じて循環参照が起こる。下にコード例を載せておく。もっとも、これはコンパイルで警告やエラーが出るので、間違って循環参照を引き起こすことは普通ない。

最終更新日 2013年07月21日 12:42

NSRunLoopの大雑把な概念について解説する。

最終更新日 2013年07月21日 12:43

UUIDは次のようにして生成することができる。

最終更新日 2013年07月21日 12:43

ユニットテストでは [NSBundle mainBundle] はリソースファイルなどが置かれているアプリケーションのディレクトリを返してくれない。Appleのドキュメントによると、

Returns the NSBundle object that corresponds to the directory where the current application executable is located.

現在のアプリケーション実行ファイルが置かれているディレクトリに対応したNSBundleオブジェクトを返す。

ということで、Xcodeインストールディレクトリ内にある、テストランナー的なプログラムが置かれている場所を返している模様。

最終更新日 2013年07月03日 13:41

次のコードは、1秒待ってから処理を再開する。キャッシュの期限切れなど、タイミングが重要となるユニットテストなどで便利。

最終更新日 2013年07月21日 12:44

カテゴリを使ってクラスを拡張し、その中でプライベートメソッドのインタフェースを宣言すればよい。次の例は、TestMeクラスをテストするTestMeTestsの実装ファイル。このファイル内に、TestMeクラスの実装部だけに記述されているプライベートメソッドのインタフェースを宣言している。

最終更新日 2013年07月21日 12:44

次のように書いてしまうと、Type mismatchでテスト失敗する。

一番スマートなのは、unsigned intリテラルをつかうこと。比較対象の数値のうしろにuをつける。

最終更新日 2013年07月21日 12:44

NSFileManagerクラスのsetAttributes:ofItemAtPath:error:メソッドを使う。変更したい属性値をまとめてNSDictionaryオブジェクトにして、引数としてわたしてやればよい。NSDictionaryに含めるのは変更したい属性だけでよい。

最終更新日 2013年07月21日 12:45

NSArrayとNSMutableArrayは、たくさんのオブジェクトをまとめて管理するときに使う。たとえば商品の一覧をテーブルで表示するときに、商品オブジェクトをまとめて格納するなど。

NSArrayのインスタンスは一旦作成されると中身を変更できないのにたいして、NSMutableArrayは中身の追加や削除をおこなうことができる。

詳解 Objective-C 2.0 第3版

必読。こんなゴミサイトより、こっちを読むべき。

Amazonでみる

iPhoneプログラミングUIKit詳解リファレンス

必読。こんなゴミサイトより、こっちを読むべき。

Amazonでみる