升級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。