Skip to content

Instantly share code, notes, and snippets.

@croath
Last active March 30, 2016 02:53
Show Gist options
  • Star 3 You must be signed in to star a gist
  • Fork 1 You must be signed in to fork a gist
  • Save croath/5027669 to your computer and use it in GitHub Desktop.
Save croath/5027669 to your computer and use it in GitHub Desktop.
关于Objective-C warning的笔记。

关于Objective-C warning的笔记。

关于deprecated方法

在开发(重构)中会遇到需要更新、替换、方法的时候,这时候就需要deprecated标签来表明已经废弃的方法。

举例说明:

重构某API Client的时候发现一个不太符合命名规范的函数名:

+(APIClient *)sharedAPIClient;

这个函数并不是创建singleton,而只是每次通过类方法来创建一个新的,所以不该用这个名字,但是当前项目中很多地方会用到这个方法,而且协作开发,其他contributor在重构了这个地方之后可能还会使用原方法名,所以这时使用deprecated标记:

+(APIClient *)sharedAPIClient __deprecated;

+(APIClient *)newHttpClient;

这样如果后续有人使用了原来的方法,会得到一个deprecated的warning。

不同version的iOS SDK中已经废弃的方法和新启用的方法同时使用的warning消除

只举例说明:(代码来自MWPhotoBrowser

// Status Bar
if ([UIApplication instancesRespondToSelector:@selector(setStatusBarHidden:withAnimation:)]) {
    [[UIApplication sharedApplication] setStatusBarHidden:hidden withAnimation:animated?UIStatusBarAnimationFade:UIStatusBarAnimationNone];
} else {
    [[UIApplication sharedApplication] setStatusBarHidden:hidden animated:animated];
}

明显为了支持3.2以前的版本,做了兼容性适配,但是因为setStatusBarHidden:animated:方法已经deprecated,就有一个deprecated warning,但是明显开发者已经意识到这一点了并做了很好的控制,所以编译时不该显示这个warning来扰乱视线,相关解决办法如下:

// Status Bar
if ([UIApplication instancesRespondToSelector:@selector(setStatusBarHidden:withAnimation:)]) {
    [[UIApplication sharedApplication] setStatusBarHidden:hidden withAnimation:animated?UIStatusBarAnimationFade:UIStatusBarAnimationNone];
} else {
#pragma clang diagnostic push
#pragma clang diagnostic ignored "-Wdeprecated-declarations"
    [[UIApplication sharedApplication] setStatusBarHidden:hidden animated:animated];`
#pragma clang diagnostic pop
}

启动了编译选项"-Wdeprecated-declarations",但是不是应用于整个project或target的,而只是需要特殊处理的几行代码。

(更多Clang相关参见Clang User Manual

尚未使用的变量或方法用unused标记

例如:

__unused static NSString *kAppKey = @"qwertyuiop";

- (void)getSomeData __unused;

[self getSomethingSuccess:^(id value1, id __unused value2)]

- (void)getDataWithUid:(NSInteger)uid name:(NSString*)__unused name{...}

后续还会更新,如有错误或疏漏,欢迎指正和增加。

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment