使用类别时,可以使用自己的方法覆盖实现方法,例如:

// Base Class 
@interface ClassA : NSObject 
- (NSString *) myMethod;
@end
@implementation ClassA
- (NSString*) myMethod { return @"A"; }
@end

//Category
@interface ClassA (CategoryB) 
- (NSString *) myMethod;
@end
@implementation ClassA (CategoryB)
- (NSString*) myMethod { return @"B"; }
@end

在包含类别后调用方法"myMethod"将得到结果"B".

myMethod的类别实现调用原始类A myMethod的最简单方法是什么?据我所知,您必须使用低级调用来获取类A的原始方法钩子并调用它,但似乎有一种语法上更简单的方法来实现这一点.

推荐答案

如果你想用一种黑客的方式来实现这一点,包括 destruct objective-c运行时,你可以使用method swizzling(在这里插入标准免责声明)它将允许您将不同的方法存储为任意命名的 Select 器,然后在运行时根据需要交换它们.

Objective-c相关问答推荐

Clang:将 id 之类的类型转换警告提升为 class

向 iOS 应用程序添加自定义字体以查找其真实姓名

多个 WKWebView 之间的 Cookie 共享

如何删除警告按钮的框架在运行时会有所不同.

在 10.9 上以编程方式启用对辅助设备的访问

Objective-C 和 Cocoa 有什么区别?

UIGestureRecognizer 是否适用于 UIWebView?

定义缓存变量时在objective-c中使用static关键字

dispatch_get_global_queue 和 dispatch_queue_create 有什么区别?

xcode 未知类型名称

NSString:从字符串中删除 UTF-8 重音的简单方法?

在 Xcode 5 中运行代码覆盖时出现数十个profiling:invalid arc tag

滚动后检测 UITableView 中的当前顶部单元格

如何确定 UICollectionView flowLayout 中单元格之间的间距

首次提交应用内购买以供审核

使用 NSLog 打印 NSData

将 NSDate 舍入到最接近的 5 分钟

Xcode中私有方法的单元测试

@package 指令在 Objective-C 中的作用是什么?

Facebook SDK 登录永远不会在 iOS 9 上回调我的应用程序