甘いものが好きです

iOS App開発時に感じた疑問や課題、その他の雑感などを書いていきます。

Objective-C

NSManagedObjectオブジェクトをdeep copyする方法

NSManagedObjectオブジェクトをdeep copyする方法を考えてみた。NSManagedObjectはNSCopyingプロトコルに適合していない。AttributeやRelationshipを個別にチェックしてコピーしていく方法が無難だろうと思う。*1*2 *1:Fetched Propertyは普段扱わないのでこ…

NSScannerを利用して16進数の文字列を10進数の数値に変換

16進数の文字列から10進数の数値を得る方法を探していたら、NSScannerを使うと便利だという情報を発見。 NSString *colorCode = @"0x80ffc4"; unsigned int rgb[3]; for (int i = 0; i < 3; i++) { NSString *component = [colorCode substringWithRange:NSM…

MRCとARCの両方に対応したコードをシンプルに書く方法

MRC(Manual Reference Counting)とARC(Automatic Reference Counting)の両方に対応したコードを書くためには #if __has_feature(objc_arc) #if __has_feature(objc_arc_weak) という分岐により条件つきコンパイルをしなければならない。 今となっては少…

文字列(NSStringオブジェクト)を画像化する方法

文字列を画像化する方法を調べてみたら、オフスクリーン描画をしてグラフィックスコンテキストから画像を得る方法が簡単だった。 Page not found · GitHub Pages 上記のページを参考にして、指定されたサイズの領域の中央に文字列を描画して画像化するコード…

警告「PerformSelector may cause a leak because its selector is unknown」への対処

セレクタを指定してオブジェクトにメッセージを送る処理について。 SEL sel = @selector(doSomething); if ([obj respondsToSelector:sel]) { [obj performSelector:sel]; } このようなコードをビルドすると、ARC有効時にperformSelector:の行について次の警…

有効ではないSEL型変数にはnilとNULLのどちらを設定すべきか

有効ではないSEL型変数にはnilとNULLのどちらを設定すべきか、少々気になったので調べてみた*1。 NULLにするのが「伝統的」 『詳解 Objective-C 2.0 第3版』の08-02節「メッセージ送信の仕組み」(185ページ)には次のように書かれている。 Objective-Cのプ…

Outletにはweakを使う

きっかけはひとつのツイートから。 .@mfks17 あ!IBoutletも弱参照か。。。 @iphone_dev_jp [@tokyopengwyn]— iphone_dev_jp (@iphone_dev_jp) June 8, 2012自分はARCを利用するようになってからもずっと、weakではなくstrongを使用してOutletをプロパティ宣…