您知道的方法在以后的SDK中出现的命名约定是什么?

Dav*_*ren 5 objective-c

我意识到这个问题存在一些主观性,但考虑到Apple开发对于命名约定非常自以为是,我想以其他人理解我的编码工作的方式来做这件事.我试图以最通用的方式提出问题,但我会在评论中添加一些我的具体细节,以防它影响你的答案.

假设我支持iOS 6和iOS 7.现有类上有一种新方法,只存在于iOS 7 SDK中.假设以对我的应用程序"足够好"的方式实现功能是相当简单的.但是,当然,我宁愿使用SDK版本,因为它可能更好地支持,更有效,更好地处理边缘情况.

正如本问答中所述,处理这种情况很简单.

if ([myInstance respondsToSelector:@selector(newSelector)]) {
    //Use the SDK method
} else {
    //Use my "good enough" implementation.
}
Run Code Online (Sandbox Code Playgroud)

但我不想在一大堆条件调用中丢弃我的代码.似乎封装这种动态方法选择会更好.(特别是在我的情况下,该方法尚未实际发货且名称/签名可能会发生变化.)

我的直觉是添加一个实现我的功能的类类别以及实现这种动态选择方法的包装器方法.

这是正确的方法吗?如果是这样,我应该使用哪些命名约定?(我显然不能将我的方法命名为与iOS7方法相同,否则会出现命名冲突.)

我的直觉反应是调用我的包装器方法safeNewSelector和我的实现一个名为lwNewSelector的私有方法(其中lw是我的标准类前缀).但我宁愿使用一些被认为是标准命名约定的东西.

Rob*_*ier 3

我的本能是添加一个类类别来实现我的功能以及实现这种动态选择方法的包装方法。

听起来不错。类别方法的命名约定是小写前缀加下划线。因此,如果您要隐藏一个名为 的方法doSomething:withAwesome:,您将命名您的类别方法ogr_doSomething:withAwesome:(假设您使用OGR作为通用前缀)。

您确实必须为类别方法添加前缀。如果两个类别实现相同的方法,则将运行未定义的行为。您不会收到编译时或运行时错误。你只会得到未定义的行为。(苹果可以而且确实在类别中实现“核心”功能,但你无法轻易检测到他们已经这样做了。)