- (instancetype)init NS_UNAVAILABLE;
+ (instancetype)new NS_UNAVAILABLE;
参考: http://developer.wonderpla.net/entry/blog/engineer/LLVM_attribute/
@interface SomeClass : NSObject
/**
* To make deprecated
*/
@property (nonatomic, assign) CGFloat aProperty __attribute__ ((deprecated("Comment")));
/**
* To make unavailable
*/
@property (nonatomic, assign) CGFloat aProperty __attribute__ ((unavailable("Comment")));
@end
#if __IPHONE_OS_VERSION_MAX_ALLOWED >= 100000
@interface PulsingHaloLayer () <CAAnimationDelegate>
#else
@interface PulsingHaloLayer ()
#endif
- iOS 10から、CAAnimationDelegate に適合していることを宣言してないとwarningが出るようになった
- しかしiOS 9以前のBaseSDKではCAAnimationDelegateはプロトコルとして定義されてなくて、ただのカテゴリである。そのため**
<CAAnimationDelegate>
と書くとビルドエラー**になる。 - そして今はまだiOS 10はBetaなので、cocoapodsにpodspecをpushしようとすると、あっちでiOS 9.3SDKでビルドが走り、ビルドエラーになる
- というわけで上のような場合分けが必要
参考:
- http://stackoverflow.com/questions/19789958/xcode-preprocessor-macro-to-check-if-base-sdk-ios-7-0
- SDK Compatibility Guide
#if __IPHONE_OS_VERSION_MAX_ALLOWED < __IPHONE_10_0
とは書けない。低いBaseSDKでビルドするとき、そのマクロが定義されてないと0として扱われ、判定結果が変わってしまうので。
親アプリとの共用コード等で、UIApplicationまわりの処理を分岐させるときとかに使う。
#if !(defined(__has_feature) && __has_feature(attribute_availability_app_extension))
//Not in the extension
#else
//In extension
#endif