メソッド、クラス、変数、定数宣言時に使えそうなものまとめ
iOS開発でメソッド、クラス、変数、定数の宣言に使えそうなものをまとめました。 Appleのヘッダーファイルを見ているとよく出てくる
NS_AVAILABLE_IOS
みたいなやつで個人的に使えそうだと思ったものをまとめます。
資料はこちら
NS_CLASS_DEPRECATED_IOS
指定したOSバージョンからそのクラスを非推奨にします。
NS_CLASS_DEPRECATED_IOS(7_0, 7_1) @interface TestClass : NSObject @end
iOS7.0まではOK、iOS7.1からは非推奨(Deprecated)という意味になります。 実際にXcodeでiOS7.1の環境でTestClassを使ってコンパイルしようとするとワーニングが出るようになります。
NS_CLASS_AVAILABLE_IOS
特定のOSバージョンからそのクラスを使えるようにします。
NS_CLASS_AVAILABLE_IOS(7_1) @interface TestClass : NSObject @end
TestClassはiOS7.1から利用可能になります。
NS_AVAILABLE_IOS
指定したOSバージョンからクラス、メソッド、定数を使えるようにします。
@interface TestClass : NSObject - (void)method NS_AVAILABLE_IOS(7_1); @end
methodメソッドはiOS7.1以降の環境でないと呼べません。定数の後ろに宣言することで定数にも同じ制限がかかります。
NS_DEPRECATED_IOS
指定したOSバージョンからクラス、メソッド、定数を非推奨にします。
FOUNDATION_EXPORT
CGFloat const kTestClassConstant NS_DEPRECATED_IOS(6_0, 7_0);
iOS7.0以上でこの定数を利用しようとするとコンパイラがワーニングを出してくれます。
NS_UNAVAILABLE
いかなる環境でもそのクラス、メソッド、定数を使えないようにします。
@interface TestClass : NSObject - (void)unavailableMethod NS_UNAVAILABLE; @end
unavailableMethodは絶対に呼ぶことはできません。利用しようとするとコンパイラはワーニングではなく、エラーを出します。
NS_REQUIRES_SUPER
サブクラスでオーバライドした際にスーパークラスのメソッドを呼ぶようにします。 なにげにかなり便利です。
@interface TestClass : NSObject - (void)overrideMethod NS_REQUIRES_SUPER; @end
TestClassをサブクラス化し、overrideMethodをオーバーライドした時に、[super overrideMethod]の形で呼び出さないとコンパイラがワーニングを出します。
NS_REQUIRES_NIL_TERMINATION
可変長の引数の最後に必ずnilを指定するようにします。
@interface TestClass : NSObject - (void)method:(NSString *)first, ... NS_REQUIRES_NIL_TERMINATION; @end
methodの引数の最後にnilをしてしなければならないようになります。UIAlertViewのあれですね。
NS_ENUM
定数を列挙します。
typedef NS_ENUM(NSUInteger, TestClassOptions) {
TestClassTypeA,
TestClassTypeB,
TestClassTypeC,
TestClassUnknown = NSUIntegerMax
};
NS_OPTIONS
ビット演算によるオプションを列挙します。
typedef NS_OPTIONS(NSUInteger, TestClassOptions) { TestClassOptionsNone = 0, TestClassOptionsA = 1 << 0, TestClassOptionsB = 1 << 1, TestClassOptionsC = 1 << 2, TestClassOptionsAll = A | B | C };
instancetype
返り値のインスタンスの型がそのクラスであることをチェックします。
@interface TestClass : NSObject - (instancetype)init; @end
initの返り値をTestClassとそのスーパークラス以外の型に入れようとするとコンパイラがワーニングを出します。
__unused
未使用であることを宣言します。
static CGFloat const __unused kConstant = 10.0;
unusedを付けないとコンパイラが未使用の定数とワーニングを出してきますが、unusedをつけることで黙らせることができます。統一性のために宣言だけしたい変数や将来使う定数、変数のために使うと便利かもしれません。
__strong
強参照でインスタンスが解放されないようにします。 変数宣言で使えます。
__weak
弱参照で参照先が解放されたとき自動でnilをセットします。 変数宣言で使えます。
__block
ブロックの中で書き換えできるようにします。 変数宣言で使えます。
__unsafe_unretained(非ARC)
参照先が解放されても自動でnilをセットせず、 retainもしないためクラッシュする可能性があることを示します。 変数宣言で使えます。