Objective-Cで最近お気に入りのマクロ4つ

2013年1月9日
objc / ios /

マクロ

マクロの利用については賛否両論がありますが、ぼくはわりかし使います。

** ※2013/1/9 追記 **

上記のとおり独自のマクロを使うこと自体に賛否両論あります。
例えば独自のマクロを定義して利用することで、

などのデメリットがあります。 特にチームや会社でのご利用の際にはよくよくご留意をお願いします。

1. [NSString stringWithFormat:] を簡単に

NSString* message = [NSString stringWithFormat:@"HELLO %3.1d", 333.333];

[NSString stringWithFormat:]はよく使うのだが長くて面倒…とよく思ってしまう。
ということで、

#define NSPRINTF(f, ...) [NSString stringWithFormat:f, __VA_ARGS__]

を定義して

NSString* message = NSPRINTF(@"HELLO %3.1d", 333.333);

としています。ちょっと楽!

** ※2013/1/9 追記 *

NSSPRINTFというネーミングは微妙。特にNSという冠詞を勝手に使うのがダメ。
元々のイメージはNSString+sprintfだったが再考すべし。

2. NSLocalizedString を簡単に

NSString* message = NSLocalizedString(@"KEY", nil);

NSLocalizedStringもよく使うのだが長いしあまり使わない引数がつきまとって面倒…とよく思ってしまう。
ということで、

#define LSTR(s) NSLocalizedString((s), nil)

を定義して

NSString* message = LSTR(@"KEY");

としています。ちょっと楽!

3. クラスメソッドの利用を簡単に

[LongLongLongNameClass classMethod];

自クラスのクラスメソッドを使うときにクラス名が長いとインスタンスメソッドのselfと比べて面倒だなと思ってしまう。 ということで、

#define ME [self class]

を定義して

[ME classMethod];

としています。ちょっと楽!

4. Blockのお伴の__weakなselfを簡単に

__weak MyClass* SELF = self;
[self doSomethingWithBlock:^{
  [SELF showAlert];
}];

Blockを使ってそこにselfをweakリファレンスで渡したいとき、そのコードの記述が面倒だなと思ってしまう。 ということで、

#define PREPARE_SELF __weak typeof(self) SELF = self

を定義して

PREPARE_SELF;
[self doSomethingWithBlock:^{
  [SELF showAlert];
}];

としています。ちょっと楽!

参考ページ

Related Entries
Latest Entries