在Xcode 6中,某些函数的文档声明该函数的可用性是iOS 8及更高版本,但事实上该函数也存在于iOS 8之前。
例如,Xcode 6中-[NSMutableURLRequest setHTTPBody]
的文档是这样的:
但是,在Xcode 5中,它是这样的:
这让我很困惑,因为我想要做的就是使用setHTTPBody
并确保它不会在iOS 8之前崩溃我的应用程序。在这种情况下,虽然Xcode 6的文档说它是“iOS 8”只是“,实际上并非如此,我浪费时间仔细检查其可用性。
有一段时间,每当我在Xcode 6的文档中看到一些“iOS 8 only”这样的功能时,我仍然需要仔细检查,而且大部分时间它们都存在于iOS 8之前。那我怎么能克服这个问题
答案 0 :(得分:2)
编译器为属性生成略有不同的二进制代码,因此这两行代码是不同的:
request.HTTPBody = foo;
[request setHTTPBody:foo];
差异很微妙,但如果您的应用在iOS 7上运行,我会使用后者。
至于你应该怎么做,请向Apple提交一个错误:https://developer.apple.com/bug-reporting/ - 请务必选择文档作为您报告错误的产品。
答案 1 :(得分:1)
从文档本身可以清楚地看到:
在iOS 8之前:
有一个用于设置HTTPBody
属性的自定义setter。该物业本身是私人的。
- (void)setHTTPBody:(NSData *)data;
在iOS 8中:
HTTPBody
是公共财产。
@property (copy) NSData *HTTPBody;