使用iOS 10 SDK編譯的警告

升級XCode 8 beta

XCode 8 Beta使用了iOS 10 SDK為默認的SDK;目前的工程,使用XCode 8 Beta編譯時,提示了一些警告信息。

Method possibly missing a [super awakeFromNib] call

使用XCode 7時并沒有報出這樣的警告,其實故名思議,需要在awakeFromNib方法里面調(diào)用其父類的方法。

- (void)awakeFromNib {
  [super awakeFromNib];
  // Initialization code
}

關(guān)于這點,Apple的官方文檔中也有說明:

You must call the super implementation of awakeFromNib to give parent classes the opportunity to perform any additional initialization they require. Although the default implementation of this method does nothing, many UIKit classes provide non-empty implementations. You may call the super implementation at any point during your own awakeFromNib method.

CAAnimationDelegate

CAAnimationDelegate在iOS 9 SDK及之前的SDK中,作為NSObject的Category

@interface NSObject (CAAnimationDelegate)
- (void)animationDidStart:(CAAnimation *)anim;
- (void)animationDidStop:(CAAnimation *)anim finished:(BOOL)flag;
@end

CAAnimationDelegate在iOS 10 SDK中作為Protocol需要被類實現(xiàn):

@protocol CAAnimationDelegate <NSObject>
@optional
- (void)animationDidStart:(CAAnimation *)anim;
- (void)animationDidStop:(CAAnimation *)anim finished:(BOOL)flag;
@end

如果要兼容XCode 7 和XCode 8,則可以通過判斷SDK版本來實現(xiàn):

#if __IPHONE_OS_VERSION_MAX_ALLOWED >= 100000
@interface SomeClass <AnyProtocal, CAAnimationDelegate>
#else
@interface SomeClass <AnyProtocal>
#endif

- (void)anyMethod;
@end

CALayerDelegate

與前面提到的CAAnimationDelegate類似,CALayerDelegate在iOS 9 SDK及之前的SDK中,作為NSObject的Category

@interface NSObject (CALayerDelegate)
- (void)displayLayer:(CALayer *)layer;
- (void)drawLayer:(CALayer *)layer inContext:(CGContextRef)ctx;
- (void)layoutSublayersOfLayer:(CALayer *)layer;
- (nullable id<CAAction>)actionForLayer:(CALayer *)layer forKey:(NSString *)event;
@end

iOS 10 SDK中作為Protocol需要被類實現(xiàn):

@protocol CALayerDelegate <NSObject>
@optional
- (void)displayLayer:(CALayer *)layer;
- (void)drawLayer:(CALayer *)layer inContext:(CGContextRef)ctx;
- (void)layerWillDraw:(CALayer *)layer CA_AVAILABLE_STARTING (10.12, 10.0, 10.0, 3.0);
- (void)layoutSublayersOfLayer:(CALayer *)layer;
- (nullable id<CAAction>)actionForLayer:(CALayer *)layer forKey:(NSString *)event;
@end

如果要兼容XCode 7 和XCode 8,則可以通過判斷SDK版本來實現(xiàn),同CAAnimationDelegate。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容