同一类上的两个类别具有相同的方法名称

2024-01-09

我注意到 UIImageView 上的 AFNetworking 和 SDWebImage 类别具有相同的方法名称。

AF网络:

- (void)setImageWithURL:(NSURL *)url {
    [self setImageWithURL:url placeholderImage:nil];
}

- (void)setImageWithURL:(NSURL *)url 
       placeholderImage:(UIImage *)placeholderImage
{
    NSMutableURLRequest *request = [NSMutableURLRequest requestWithURL:url];
    [request setHTTPShouldHandleCookies:NO];
    [request addValue:@"image/*" forHTTPHeaderField:@"Accept"];

    [self setImageWithURLRequest:request placeholderImage:placeholderImage success:nil failure:nil];
}

- (void)setImageWithURLRequest:(NSURLRequest *)urlRequest 
              placeholderImage:(UIImage *)placeholderImage 
                       success:(void (^)(NSURLRequest *request, NSHTTPURLResponse *response, UIImage *image))success
                       failure:(void (^)(NSURLRequest *request, NSHTTPURLResponse *response, NSError *error))failure
{
...
}

和 SDWebImage

- (void)setImageWithURL:(NSURL *)url
{
    [self setImageWithURL:url placeholderImage:nil options:0 progress:nil completed:nil];
}

- (void)setImageWithURL:(NSURL *)url placeholderImage:(UIImage *)placeholder
{
    [self setImageWithURL:url placeholderImage:placeholder options:0 progress:nil completed:nil];
}

- (void)setImageWithURL:(NSURL *)url placeholderImage:(UIImage *)placeholder options:(SDWebImageOptions)options
{
    [self setImageWithURL:url placeholderImage:placeholder options:options progress:nil completed:nil];
}

...

在 Xcode 中,当我按住命令单击 SDWebImage 方法时,它会将我重定向到 AFNetworking 方法,反之亦然。

我可以在哪里期待哪些行为?我是否应该只在我想要使用它的类中包含适当类别的标题?如果同一个类需要使用该类别的两种实现怎么办?

另一个相关问题“如果两个 ObjC 类别重写相同的方法会发生什么? https://stackoverflow.com/questions/3221972/what-happens-if-two-objc-categories-override-the-same-method" 与此不太一样,因为 AFNetworking 和 SDWebImage 都将类别添加到同一个类而不是子类上。在这种情况下,仅使用一次类,并且 2 个类别似乎存在冲突。


名称冲突确实是 Objective-C 运行时可能发生的事情......Apple 建议在方法名称上使用“前缀” http://developer.apple.com/library/ios/#documentation/cocoa/conceptual/ProgrammingWithObjectiveC/CustomizingExistingClasses/CustomizingExistingClasses.html.

预期的行为:只有运行时加载的最后一个类别/方法才会有效。 哪一个 ? 不好的问题!

我的建议:重命名!

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

同一类上的两个类别具有相同的方法名称 的相关文章

  • 对 UIView 框架进行动画处理,子视图 UIScrollView 并不总是进行动画处理

    In this http screencast com t YvjNf5Z1xMn例子 当我对 tabBarController 进行动画处理时 为了实现全屏效果 我对 PhotoViewerViewController 的框架进行了动画处
  • 使用 Java 创建 plist

    有没有一种简单的方法可以用Java创建plist 结果应该与 Objective C 中序列化字典相同 The PList http code google com p xmlwise source browse trunk src mai
  • Objective C iPhone 何时将对象引用设置为 nil

    我使用 Objective C 和 Cocoa 框架进行开发已经有一段时间了 然而 我仍然不太清楚 我什么时候应该将对象引用设置为 nil 我知道建议在释放具有委托的对象之前执行此操作 并且您还应该在保留子视图的 viewDidUnload
  • 核心数据是否始终将返回对象视为错误?

    在下面的代码中 我显式地将 returnObjectsasFaults 设置为 false 然后在请求之后我立即检查对象是否有故障 NSAssert 失败 也许是因为该对象是 imageBlob 也许我错过了什么 我只是想确定一下 这是一个
  • iOS:管理本地化图像

    我有 2 组 iPhone 应用程序的本地化图像 我应该如何放置图像 我如何加载到应用程序中 文件夹结构如下 For English version MyApp en lproj Localizable strings InfoPList
  • UICollectionView 和补充视图(标题)

    尝试将补充视图添加到我的UICollectionView作为标题 我在让它工作时遇到问题 我用的是自定义的UICollectionViewFlowLayout返回一个contentSize总是比框架大至少 1 像素 我使用的是UIFresh
  • 强/弱/保留/__unsafe_unretained/分配

    合成属性的属性 保留 分配 保留 它被保留 旧值被释放并被分配 分配 仅分配 所有权财产 iOS5 强 弱 IOS4 保留 unsafe unretained 强 iOS4 保留 我是所有者 你不能释放它 在瞄准之前 保留 弱 iOS 4
  • ios - navigationItem.titleView 更新时闪烁

    我有一个UIView 拿着一个UIButton 设置为我的navigationItem titleView 当我更新此按钮的文本时 它会短暂闪烁 消失并随新文本重新出现 无论如何 当它改变时 是否可以保持它可见 那么 如果我更改 2015
  • 如何在首选项包中使用 PSLinkListCell 中的值?

    我想为我的越狱调整制作一个偏好包 我成功地制作了一个带有可用开关的首选项捆绑包 但我想要一个选择颜色的设置 例子 Blue Color gt Yellow Green 所以如果我点击Color 它会将我带到另一个屏幕 要求我选择 Blue
  • GKLocalPlayer 身份验证不起作用,但 isAuthenticated 返回 YES(游戏中心沙盒)

    我正在努力将回合制比赛集成到我的游戏中 几天前 我开始从 GameKit API 收到奇怪的错误 指出本地玩家未经过身份验证 尽管他已通过身份验证 当我启动应用程序时 authenticateHandler被调用 显示视图控制器 输入密码后
  • 函数“FBSDK_NOT_DESIGNATED_INITIALIZER”的隐式声明在 C99 中无效预期“)”

    我正在使用适用于 iOS 4 6 0 的 Facebook SDK 今天将 cocoapods 更新到 0 38 2 后遇到了上述错误 我不确定这个错误与 cocoapods 有什么关系 Error screenshot 我遇到过同样的问题
  • 创建宏来执行默认初始化

    我有很多重复这个简单样板的方法 id myObject if myObject self myObject myObject class new return myObject 所以我想用一个简单的宏来替换它 define default
  • 使用 UINavigationController 从右向左推送 ViewController

    大家都知道UINavigationController从左到右推送ViewController 有没有办法从右到左推送View 就像后退按钮的动画一样 现在我有这个 self navigationController pushViewCon
  • 如何在 iPhone 应用程序的 url 中传递字符串值

    NSURLRequest request NSURLRequest requestWithURL NSURL URLWithString http www krsconnect no community api html method ba
  • NSMutableData 删除字节?

    我可以使用以下命令轻松地将字节添加到 NSMutableData 实例appendData方法 但是我没有看到任何类似的删除数据的方法 我是否忽略了某些内容 或者我是否需要创建一个新对象并仅复制我需要的字节 请参阅以下方法的文档 void
  • 使用捏合手势;如何放大用户手指实际“捏”的位置?

    我已经在我的应用程序中的 UIImageView 上实现了 UIPinchGestureRecognizer 但是无论我在图像的哪个位置捏合 它似乎都会放大到同一个位置 有谁知道我如何让它放大到用户实际 捏 的地方 请参阅下面的代码 视图控
  • 无限 UIScrollView 在 iOS4.3 中出现奇怪的行为,而不是 iOS5

    我已经实现了一个包含 UIView 的无限 UIScrollView 在 iOS5 模拟器和 iPhone 中滚动时 效果非常好 但在 iOS 4 3 sim 和手机 中 情况有点疯狂 滚动条传递的视图比应有的多 大约比 iOS5 多 10
  • 如何将 #ifdef DEBUG 添加到 Xcode?

    我的项目中有一些代码永远不应该在发布版本中使用 但在测试时很有用 我想做这样的事情 ifdef DEBUG Run my debugging only code endif 在 Xcode 4 中哪里添加 DEBUG 设置 我尝试将其放入
  • UICollectionviewcell 更改背景

    如果我知道部分编号和项目编号 如何更改单元格中的背景 下面的代码显示了我如何尝试做到这一点 UICollectionViewCell collectionView UICollectionView collectionView cellFo
  • 连接到 Apple Music

    所以我尝试使用 React Native 应用程序从 iOS 设备连接到 Apple Music 有一个 API 可以执行相同的操作 但我需要从 storekit 框架调用一个函数 提出个性化请求 苹果音乐API https develop

随机推荐