Mat*_*art 0 virtual-functions properties dynamic objective-c
在objective-c中,可以向属性添加@dynamic.
这也适用于普通的实例方法吗?
编辑 我认为我不够清楚.
我想做以下事情:
@interface MyClass
@property (retain) NSObject *somePropertyObject;
- (void) myMethod;
@end
@implementation MyClass
@dynamic somePropertyObject;
//Make myMethod dynamic. I do not want to implement it. Like C++ Virtual
@end
Run Code Online (Sandbox Code Playgroud)
如果您的意思是"我如何声明一个方法,但不提供我将在运行时提供的定义?" 然后它很容易,只需使用一个类别.像这样:
@interface MyObject : NSObject
// Methods I'll define
- (void)doFoo;
@end
@interface MyObject (DynamicallyProvidedMethods)
// Methods I won't
- (void)myDynamicMethod;
@end
@implementation MyObject
// Methods I'll define
- (void)doFoo
{
}
@end
Run Code Online (Sandbox Code Playgroud)
编译器不会抱怨,但是如果你在运行时调用-myDynamicMethod,除非你以某种方式为它提供了一个实现,它将与"无法识别的选择器"崩溃.当然,您可以通过调用respondsToSelector:在运行时测试它.
相关地,如果您正在寻找一个近似等效的基类纯虚方法,我建议提供一个空实现,如果它没有被子类覆盖,则在调用时断言.你可以这样做:
NSAssert((class_getInstanceMethod([self class], _cmd) == class_getInstanceMethod([MyObject class], _cmd)),
@"Subclass of %@ must override -%@",
NSStringFromClass([MyObject class]),
NSStringFromSelector(_cmd));
// ...where overridesSelector:ofBaseClass: looks like:
//
// return ;
Run Code Online (Sandbox Code Playgroud)
当然,这不会在编译时提醒你注意问题,但总比没有好.
HTH
| 归档时间: |
|
| 查看次数: |
2889 次 |
| 最近记录: |