#import "ViewController.h"
#import "Programmer.h"
#import "Singer.h"
#import "Artist.h"
@interface ViewController ()
@end
@implementation ViewController
- (void)viewDidLoad {
[super viewDidLoad];
Programmer * grammer = [Programmer new];
// 在performSelector中使用NSSelectorFromString会造成警告
// 可以通过设置不检测performSelector内存泄露关闭警告
//[grammer performSelector:NSSelectorFromString(@"sing") withObject:nil];
//或者通过类型强转来实现,无警告
[(Artist*)grammer draw];
[(Singer*)grammer sing];
}
@end
#import <Foundation/Foundation.h>
@interface Programmer : NSObject
@end
#import "Programmer.h"
#import "Singer.h"
#import "Artist.h"
@implementation Programmer
// 通过消息转发实现多继承
- (id)forwardingTargetForSelector:(SEL)aSelector {
Singer * singer = [[Singer alloc] init];
Artist * artist = [[Artist alloc] init];
if ([singer respondsToSelector:aSelector]) {
return singer;
}
else if ([artist respondsToSelector:aSelector]) {
return artist;
}
return nil;
}
@end
#import <Foundation/Foundation.h>
@interface Artist : NSObject
// 画家可以绘画
- (void)draw;
@end
#import "Artist.h"
@implementation Artist
-(void)draw {
NSLog(@"I can draw");
}
@end
#import <Foundation/Foundation.h>
@interface Singer : NSObject
// 歌手会唱歌
- (void)sing;
@end
#import "Singer.h"
@implementation Singer
- (void)sing {
NSLog(@"I can sing");
}
@end
网友评论