iPhone:共享一个函数,但扩展不同的类
嘿,多个对象可以共享一个函数但扩展不同的类吗?因为我不想一遍又一遍地重写我的代码。下面是一个没有上述方法的示例: 我希望有一个单一的方法,而不必调用iPhone:共享一个函数,但扩展不同的类,iphone,function,Iphone,Function,嘿,多个对象可以共享一个函数但扩展不同的类吗?因为我不想一遍又一遍地重写我的代码。下面是一个没有上述方法的示例: 我希望有一个单一的方法,而不必调用[MovieClip loadscape] 旋转协议 MovieClip.h 时间轴.h 一个可能的解决方案,我不愿意推荐,是在UIView上提供一个类别(两个类共享的最高级别超类),它添加loadLandscape方法实现,然后您可以将其从对象中删除,只声明类支持该协议(并导入该类别) 这有点极端,因为每个UIView实例都会得到可以调用的方法,这
[MovieClip loadscape]时间线实现中的代码>
旋转协议
MovieClip.h
时间轴.h
一个可能的解决方案,我不愿意推荐,是在UIView上提供一个类别(两个类共享的最高级别超类),它添加loadLandscape方法实现,然后您可以将其从对象中删除,只声明类支持该协议(并导入该类别)
这有点极端,因为每个UIView实例都会得到可以调用的方法,这可能会混淆检查respondsToSelector而不是conformsToProtocol的内容
我使用的技术是将该实现作为类级方法放入类似RotatingProtocolImplementation类的东西中。调用协议的loadLandscape方法必须知道一些事情,并且一些事情可以很容易地检测到声明的类对协议的支持,并调用共享类级别的方法,而不是类实例本身的方法-因此协议可以更像一个标记协议,而不需要那么多(或任何)标记类必须定义方法来支持它
@protocol RotatingProtocol
@required
- (void)loadPortrait;
- (void)loadLandscape;
@end
#import "RotatingProtocol.h"
@interface MovieClip : UIButton <RotatingProtocol> {
}
@end
#import "MovieClip.h"
@implementation MovieClip
- (void)loadPortrait {
// UIButton -> setframe to fit portrait screen
}
- (void)loadLandscape {
// Popup and alert!
}
@end
#import "RotatingProtocol.h"
@interface Timeline : UIScrollView <RotatingProtocol> {
}
@end
#import "Timeline.h"
@implementation Timeline
- (void)loadPortrait {
// Do funny animation
}
- (void)loadLandscape {
// Do exactly the same thing as [MovieClip loadLandscape]
}
@end