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

この記事は投稿日から1年以上が経過しています。

マクロ

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

** ※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];
}];

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

参考ページ

所の執筆・監修した書籍

iOS 11 Programming

iOS 11 Programming

  • 著者:堤 修一,吉田 悠一,池田 翔,坂田 晃一,加藤 尋樹,川邉 雄介,岸川 克己,所 友太,永野 哲久,加藤 寛人,
  • 製本版,電子版
  • PEAKSで購入する