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