objective-c - NSURL 隐藏方法 queryParameters 可能会覆盖类别

标签 objective-c ios categories nsurl

我有这种奇怪的行为,当我在装有 iOs 5.1 的 iPhone 3G 上运行时,我的一个类别方法被覆盖了。

我有这个类别:

@interface NSURL (queryParameters)
    - (NSDictionary *) queryParameters;
@end

返回一个包含 NSString 键和 NSArray 值的字典(我的 url 中有多个同名参数)。

它工作正常,除了在上面提到的设备上我得到一个 NSDictionary 和 NSString 作为值而不是我期望的 NSArray(对应于我的 url 中的最后一个参数)。

我创建了一个空项目,在其中构建了一个虚拟 NSURL 并发现它响应选择器“queryParameters”,并返回一个以 NSString 作为值的 NSDictionary:

NSString *urlString = @"http://dummy.url?foo=bar1&foo=bar2";
NSURL *url = [NSURL URLWithString:urlString];

NSLog(@"%@", [url respondsToSelector:@selector(queryParameters)]?@"YES":@"NO");
    // YES

NSLog(@"%@", [[url performSelector:@selector(queryParameters)] debugDescription]);
    // {
    //     foo = bar2;
    // }

所以我有两个问题:

  • 有人知道这个方法是否属于 Apple 私有(private) api(或其他任何东西)吗?

编辑: 根据此页面 iOS6-Private-Frameworks ,这个“queryParameters”是 NSURL 的一个未记录的方法(但这并不能解释为什么在某些情况下它被覆盖)。

  • 为什么我的“自己的”方法被这个“私有(private)”方法覆盖了?

备注:我最终重命名了自己的方法以避免这种冲突。

最佳答案

我认为这里的约定也是在不受您控制的类上为您的类别方法添加前缀,以避免任何名称冲突!

关于objective-c - NSURL 隐藏方法 queryParameters 可能会覆盖类别,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13624267/

相关文章:

objective-c - 观察对象所有属性变化

iphone - 类别不识别 Ivars

ios - Cocoa Core Data - 检查具有相同属性的对象是否已经存在的最佳实践

ios - 如何正确获取和设置 UIView 的 UIColor?

javascript - PhoneGap TabBar自定义字体、背景图案

iphone - 更改 UITabBar 文本

ios - drawRect:在 UIView 类别中

php - 有没有一种有效的方法可以在 mySQL 中搜索变量参数并获得不同的结果?

iphone - 如何在Three20的AppDelegate中添加全局右栏按钮(UINavigationController)

ios - 检查重复事件,而不在IOS的事件存储中获取所有事件