您如何处理 iPhone 中已弃用的方法,这些方法要求您使用较新的方法,而在旧版本中不可用?
考虑以下情况setStatusBarHidden:animated:
,在 iOS 3.2 中已弃用。该文档提示您使用setStatusBarHidden:withAnimation:
,仅在 iOS 3.2 或更高版本中可用。
如果我理解正确的话,这意味着要针对所有设备(iOS 3.0 或更高版本),我必须首先询问是否setStatusBarHidden:withAnimation:
可用。如果是,请使用它。如果没有,请使用已弃用的方法。但我仍然会收到弃用警告。
这是正确的吗(请说不是!)?如果是,有什么方法可以抑制此弃用警告,或者向编译器表明我已经处理了该问题?
我找到了一个similar https://stackoverflow.com/questions/2853184/suppressing-line-specific-xcode-compiler-warnings假设的问题yes,这是处理已弃用方法的正确方法,并且no,没有办法根据具体情况抑制弃用警告,但有一些技巧会误导编译器。
为了处理示例案例,我决定使用以下技巧之一创建一个 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
如果我没有记错的话respondsToSelector
成本高昂。这可以针对性能进行优化,以记住第一次查询后是否存在新选择器,从而避免在后续调用中进行反射。
来自 Java 背景的我发现这种处理弃用的方式令人震惊,而且我仍然不敢相信这就是 iOS 设计者期望我们处理这个问题的方式。关于这个主题的更多想法将不胜感激。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)