NSStringオブジェクトの==比較について

// テスト1
NSString *a = [NSString stringWithString:@"STR"];
NSString *b = [NSString stringWithFormat:@"%@", @"STR"];
NSLog(@"aとbは%@", a == b ? @"同じ" : @"違う");

// テスト2
NSString *a = [NSString stringWithString:@"STR"];
NSString *b = @"STR";
NSLog(@"aとbは%@", a == b ? @"同じ" : @"違う");

テスト1は同じ、テスト2は違う
CFGetRetainCountでリファレンスカウントしてみると、テスト2のbは開放不要になってますね。

iOSアプリ開発に便利なマクロ

Prefix.pchに定義しておくと便利なマクロです。
ファイルが見当たらない場合は次の記事も合わせてどうぞ。

短縮NSLog

#define LOG(format, ...) (NSLog(@"%s(L%d) %@", __PRETTY_FUNCTION__, __LINE__, [NSString stringWithFormat:format, ##__VA_ARGS__]))

NSLogと同じ使い方で「メソッド名」「行数」も追加して出力します。

設定言語判定

#define SYSTEM_LANGUAGE ([NSLocale preferredLanguages][0])
if ([SYSTEM_LANGUAGE isEqualToString:@"ja"]) {
    // 日本語で使用中
}

iOSバージョン判定

#define SYSTEM_VERSION_COMPARE(comparator, version) ([[UIDevice currentDevice].systemVersion compare:version options:NSNumericSearch] comparator NSOrderedSame)

比較演算子で分かりやすく分岐できます。

if (SYSTEM_VERSION_COMPARE(>=, @"4.2.10")) {
    // iOS4.2.10以上
}

iPhone or iPad デバイス判定

#define IS_IPAD ([UIDevice currentDevice].userInterfaceIdiom == UIUserInterfaceIdiomPad)
#define IS_IPHONE ([UIDevice currentDevice].userInterfaceIdiom == UIUserInterfaceIdiomPhone)

条件の左辺はマクロが定義されているので、UI_USER_INTERFACE_IDIOM()に書き換えても同じです。

[UIDevice currentDevice].userInterfaceIdiom

の部分は新しい書き方だと

[UIScreen mainScreen].traitCollection.userInterfaceIdiom