如果我想扩展像AVAudioPlayer这样的类,那么向AvaudioPlayerLegate添加另一个方法的最佳方式是什么?

我应该为它分类吗?我应该扩展它吗?

如果我扩展它,那么我还必须确保覆盖实际的委托getter/setter吗?我该如何扩展协议?

下面是我的错误

@protocol AudioTrackDelegate : AVAudioPlayerDelegate {
    - (void)foo;
}
@end

@interface AudioTrack : AVAudioPlayer {
}
@end

推荐答案

创建实现另一协议的协议的语法如下:

@protocol NewProtocol <OldProtocol>
- (void)foo;
@end

如果要对键入为OldProtocol的指针调用NewProtocol中的方法,可以调用respondsToSelector:

if ([object respondsToSelector:@selector(foo)])
    [(id)object foo];

或者将存根方法定义为NSObject上的一个类别:

@interface NSObject (NewProtocol)
- (void)foo;
@end
@implementation NSObject (NewProtocol)
- (void)foo
{
}
@end

Objective-c相关问答推荐

Objective-C - 将浮点数转换为字符串的其他方法

核心数据独特属性

Objective-C 和 Cocoa 有什么区别?

iOS performSelectorOnMainThread 有多个参数

在Objective C中迭代枚举?

块引用作为Objective-C中的实例变量

判断 NSInteger 是奇数还是偶数

使用 Objective-C 查找 IMEI 号码

arc4random 和 arc4random_uniform 有什么区别?

如何编写 OS X Finder 插件

CFURLCopyResourcePropertyForKey 失败,因为通过 URL 没有方案

自定义 UINavigationBar 背景

从 UIImage 获取 Exif 数据 - UIImagePickerController

单例释放方法产生警告?

通过将另一个字符串重复给定次数来创建 NSString

目标覆盖 FRAMEWORK_SEARCH_PATHS 构建设置

从带有参数的方法名称创建 Select 器

如何删除 UIToolBar 上的顶部边框

如何阻止 NSNotification 中的观察者调用两次?

UICollectionView:如何检测滚动何时停止