Kri*_*nan 7 inheritance objective-c
我有一个名为BaseClass的基类.许多类派生自BaseClass,即SubClass1,SubClass2和SubClass3.
@interface BaseClass: NSObject{
}
-(void)configure;
@end;
@implementation
-(void)configure{
NSLog(@"This needs to log from which sub class this method was called");
}
@end;
Run Code Online (Sandbox Code Playgroud)
可以通过创建子类的实例或在它们的实现中调用configure方法.
我需要知道调用此方法的子类.
这可能吗?
Nik*_*uhe 13
不可以.方法无法知道它们被调用的是哪个其他对象的方法.甚至没有呼叫者身份的概念.可以从C函数调用方法,其中根本没有调用者对象.
我需要知道调用此方法的子类.
话虽这么说,你可能只想知道一个对象是哪个(派生)类:
NSLog(@"My class: %@", NSStringFromClass([self class]));
Run Code Online (Sandbox Code Playgroud)
2014年附录:有一个__builtin_return_address
可用于此目的的gnu扩展名.Mike Ash演示了如何使用它来提取呼叫者符号名称(请参阅"呼叫者检查").我仍然认为整个方法有点脆弱,只能用于调试.
接受的答案不正确。
NSArray *stack = [NSThread callStackSymbols];
NSString *methodThatDidLogging = [stack objectAtIndex:1];
Run Code Online (Sandbox Code Playgroud)
您可以轻松解析此字符串以获取调用者的类和方法名称。
我在自定义记录器中使用它来打印记录消息的类和方法
干杯
归档时间: |
|
查看次数: |
5759 次 |
最近记录: |