甘いものが好きです

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

使いこなすと便利な文字列出力関数

普段はiOS Appばかり書いているのだけれど、たまにMac Appを書く機会がある。iOS Libraryとは勝手が違う部分のあるMac OS X Libraryに少々戸惑いつつも、本を読んだりネットで調べ物をしたりしながら書く。先日、参考にしていたソースコードでNSLogで出力する文字列を作成するのにNSStringFromPointという関数が使われているのを目にした。あれ、こんな便利な関数があっただろうか? と思ったら、どうやらiOS LibraryにはないがMac OS X Libraryには存在するという関数があるらしい。Mac Appを書くときには利用しよう。

Mac OS X 10.7 Core Library と iOS 5 Libraryの両方に存在

  • NSString * NSStringFromClass(Class aClass);
  • NSString * NSStringFromProtocol(Protocol *proto);
  • NSString * NSStringFromRange(NSRange range);
  • NSString * NSStringFromSelector(SEL aSelector);

Mac OS X 10.7 Core Libraryにのみ存在

  • NSString * NSStringFromHashTable(NSHashTable *table);
  • NSString * NSStringFromMapTable(NSMapTable *table);
  • NSString * NSStringFromPoint(NSPoint aPoint);
  • NSString * NSStringFromRect(NSRect aRect);
  • NSString * NSStringFromSize (NSSize aSize);

自分で文字列出力関数を定義する

Mac OS X Libraryには存在していてiOS Libraryには存在していないような関数をデバッグ関数として使用したいのであれば、プリコンパイルヘッダで定義すればよい。『iOS SDK Hacks』のHACK#5「便利マクロ」が参考になる。

iOS SDK Hacks ―プロが教えるiPhoneアプリ開発テクニック

iOS SDK Hacks ―プロが教えるiPhoneアプリ開発テクニック

#ifdef DEBUG
    #define MyNSLogPoint(p)    NSLog(@"{%f,%f}", p.x, p.y);
#else
    #define MyNSLogPoint(p)    ;
#endif

追記(2012/05/17)

iOS Libraryにのみ存在する文字列出力関数を発見。NSStringFromPoint/Rect/Sizeの代わりになる関数があった。これは助かる。

  • NSString * NSStringFromCGAffineTransform (CGAffineTransform transform);
  • NSString * NSStringFromCGAffineTransform(CGAffineTransform transform);
  • NSString * NSStringFromCGPoint(CGPoint point);
  • NSString * NSStringFromCGRect(CGRect rect);
  • NSString * NSStringFromCGSize(CGSize size);
  • NSString * NSStringFromUIEdgeInsets (UIEdgeInsets insets);
  • NSString * NSStringFromUIOffset(UIOffset offset);