hpi*_*que 5 iphone deprecated compiler-warnings ios
如何处理iPhone中需要使用较新版本的旧方法的旧方法?
考虑一下setStatusBarHidden:animated:在iOS 3.2中弃用的情况.您将使用的文档指向setStatusBarHidden:withAnimation:,仅适用于iOS 3.2或更高版本.
如果我理解正确,这意味着要定位所有设备(iOS 3.0或更高版本),我必须首先询问是否setStatusBarHidden:withAnimation:可用.如果是,请使用它.如果不是,请使用弃用的方法.但我仍然会收到弃权警告.
这是正确的(请说它不是!)?如果是,是否有任何方法可以抑制此弃用警告,或者指示编译器已经处理了该问题?
我发现了一个类似的问题,假设是的,这是处理弃用方法的正确方法,不,没有办法在每个案例的基础上抑制弃用警告,但是有一些黑客可能会误导编译器.
为了处理示例案例,我决定使用以下方法之一创建一个util类:
@protocol UIApplicationDeprecated
- (void) setStatusBarHidden:(BOOL)hidden animated:(BOOL)animated;
@end
@implementation UIUtils
+ (void) setStatusBarHidden:(BOOL)hidden animated:(BOOL)animated {
if([[UIApplication sharedApplication] respondsToSelector:@selector(setStatusBarHidden:withAnimation:)]) {
[[UIApplication sharedApplication] setStatusBarHidden:hidden withAnimation:animated ? UIStatusBarAnimationSlide : UIStatusBarAnimationNone];
} else {
id<UIApplicationDeprecated> app = (id)[UIApplication sharedApplication];
[app setStatusBarHidden:hidden animated:animated];
}
}
@end
Run Code Online (Sandbox Code Playgroud)
如果我没弄错,使用respondsToSelector费用很高.这可以针对性能进行优化,以便在第一次查询之后存在新选择器,从而避免在后续调用中需要反射.
来自Java背景,我发现这种处理弃用令人震惊的方式,我仍然无法相信这是iOS设计师期望我们处理这个问题的方式.关于这个问题的更多想法将不胜感激.
| 归档时间: |
|
| 查看次数: |
5836 次 |
| 最近记录: |