检查如果设备 iOS 平台中存在超载的方法

发布时间: 2014/11/30 19:29:54
注意事项: 本文中文内容可能为机器翻译,如要查看英文原文请点击上面连接.

在 ALAssetsLibrary Class 中有 2 种"writeImageToSavedPhotosAlbum"方法:

- (void)writeImageToSavedPhotosAlbum:(CGImageRef)imageRef 
                            metadata:(NSDictionary *)metadata 
                     completionBlock:(ALAssetsLibraryWriteImageCompletionBlock)completionBlock  

(适用于 iOS 4.1 +)

- (void)writeImageToSavedPhotosAlbum:(CGImageRef)imageRef 
                         orientation:(ALAssetOrientation)orientation
                     completionBlock:(ALAssetsLibraryWriteImageCompletionBlock)completionBlock

(适用于 iOS 4.0 或以上版本)

我使用的第一个 (需要 iOS 4.1) 在我的代码,它将会崩溃 iOS 4.0 设备上。我想使用 respondsToSelector 来检查哪一种方法支持,但看起来像选择器只检查方法名称、 参数不。

我读一些建议,感觉到它可能不好由纯粹检查操作系统版本,那么,有什么类似于 respondstoselector,能帮我解决这个问题吗?

解决方法 1:

你误解了objective-c 方法命名系统。选择器可以所有的组合 foo:bar:baz: 相结合。所以,在这种情况下,是没有方法,称为 writeImageToSavedPhotosAlbum 。第一个是,作为一个选择器,对应于

@selector(writeImageToSavedPhotosAlbum:metadata:completionBlock:)

第二个是

@selector(writeImageToSavedPhotosAlbum:orientation:completionBlock:)

在您的代码中,检查是否第一个选择器可用或不在

if([obj respondsToSelector:@selector(writeImageToSavedPhotosAlbum:metadata:completionBlock:)]){
      ....
}

这应当区分第一是否可用。

官方微信
官方QQ群
31647020