SlideShare una empresa de Scribd logo
1 de 16
Descargar para leer sin conexión
クラス・メソッド・定数・変数
宣言時に使えそうなものまとめ
iOS_LT #12
大西智也
自己紹介
• iOS開発歴約3年
• ツイート専用アプリ「FasPos」:累計5万DL
• その他位置情報ログアプリなどいくつか
• クラス・メソッド・定数・変数宣言に使えそう
なものをまとめた
!
• たくさんあるが自分でこれは使える!とおもっ
たものだけ
NS_CLASS_DEPRECATED_IOS
• 指定したOSバージョンからそのクラスを非推奨にする
NS_CLASS_DEPRECATED_IOS(7_0, 7_1)
@interface TestClass : NSObject
!
@end
iOS7.0まではOK、iOS7.1では非推奨
NS_CLASS_AVAILABLE_IOS
• 特定のOSバージョンからそのクラスを使えるよう
にする
NS_CLASS_AVAILABLE_IOS(7_1)
@interface TestClass : NSObject
!
@end
NS_AVAILABLE_IOS
• クラス、メソッド、定数を指定したOSバージョン
から使えるようにする
@interface TestClass : NSObject
!
- (void)method NS_AVAILABLE_IOS(7_1);
!
@end
NS_DEPRECATED_IOS
• クラス、メソッド、定数を指定したOSバージョン
から非推奨にする
FOUNDATION_EXPORT
CGFloat const kTestClassConstant NS_DEPRECATED_IOS(6_0, 7_0);
NS_UNAVAILABLE
• クラス、メソッド、定数を使えなくする
@interface TestClass : NSObject
!
- (void)unavailableMethod NS_UNAVAILABLE;
!
@end
NS_REQUIRES_SUPER
• サブクラスでオーバライドした際にスーパークラ
スのメソッドを呼ぶようにする
@interface TestClass : NSObject
!
- (void)overrideMethod NS_REQUIRES_SUPER;
!
@end
NS_REQUIRES_NIL_TERMINATION
• 可変長の引数の最後に必ずnilを指定するようにす
る
@interface TestClass : NSObject
!
- (void)method:(NSString *)first, ... NS_REQUIRES_NIL_TERMINATION;
!
@end
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
__unused
• 未使用であることを宣言する
static CGFloat const __unused kConstant = 10.0;
使わないけど統一性のために宣言しておきたい定数や
将来的に使うものにつけておくとワーニングがでない
変数宣言時に使える
__strong
強参照でインスタンスが解放されないようにする
__weak
弱参照で参照先が解放されたとき自動でnilをセットする
__block
ブロックの中で書き換えできるようにする
__unsafe_unretained(非ARC)
参照先が解放されても自動でnilをセットせず、
retainもしないためクラッシュする可能性があることを示す
おわり
• 他にも__attribute__を使うなどいろいろあるが、
むやみに使ってもゴチャゴチャするだけ
• 複数人で開発するときやみんなが使うライブラリな
どで効果的

Más contenido relacionado

Destacado

Xcode 6の新機能
Xcode 6の新機能Xcode 6の新機能
Xcode 6の新機能Shingo Sato
 
iOS 8/Swift エンジニア勉強会@ヤフー
iOS 8/Swift エンジニア勉強会@ヤフーiOS 8/Swift エンジニア勉強会@ヤフー
iOS 8/Swift エンジニア勉強会@ヤフー大介 束田
 
虚数は作れる!Swift で学ぶ複素数
虚数は作れる!Swift で学ぶ複素数虚数は作れる!Swift で学ぶ複素数
虚数は作れる!Swift で学ぶ複素数Taketo Sano
 
Advanced nginx in mercari - How to handle over 1,200,000 HTTPS Reqs/Min
Advanced nginx in mercari - How to handle over 1,200,000 HTTPS Reqs/MinAdvanced nginx in mercari - How to handle over 1,200,000 HTTPS Reqs/Min
Advanced nginx in mercari - How to handle over 1,200,000 HTTPS Reqs/MinMasahiro Nagano
 
iOS 8 Widget ~ 導入から Tips まで
iOS 8 Widget ~ 導入から Tips までiOS 8 Widget ~ 導入から Tips まで
iOS 8 Widget ~ 導入から Tips までYuki Tanabe
 

Destacado (7)

Xcode 6の新機能
Xcode 6の新機能Xcode 6の新機能
Xcode 6の新機能
 
iOS 8/Swift エンジニア勉強会@ヤフー
iOS 8/Swift エンジニア勉強会@ヤフーiOS 8/Swift エンジニア勉強会@ヤフー
iOS 8/Swift エンジニア勉強会@ヤフー
 
虚数は作れる!Swift で学ぶ複素数
虚数は作れる!Swift で学ぶ複素数虚数は作れる!Swift で学ぶ複素数
虚数は作れる!Swift で学ぶ複素数
 
Advanced nginx in mercari - How to handle over 1,200,000 HTTPS Reqs/Min
Advanced nginx in mercari - How to handle over 1,200,000 HTTPS Reqs/MinAdvanced nginx in mercari - How to handle over 1,200,000 HTTPS Reqs/Min
Advanced nginx in mercari - How to handle over 1,200,000 HTTPS Reqs/Min
 
iOS 8 Widget ~ 導入から Tips まで
iOS 8 Widget ~ 導入から Tips までiOS 8 Widget ~ 導入から Tips まで
iOS 8 Widget ~ 導入から Tips まで
 
既存アプリのiOS8対応 #ios8yahoo
既存アプリのiOS8対応 #ios8yahoo既存アプリのiOS8対応 #ios8yahoo
既存アプリのiOS8対応 #ios8yahoo
 
App dojo-2014-03-27
App dojo-2014-03-27App dojo-2014-03-27
App dojo-2014-03-27
 

クラス・メソッド・定数・変数宣言時に使えそうなものまとめ