美文网首页
关于 iOS 实现多继承的补充

关于 iOS 实现多继承的补充

作者: 大白简先生 | 来源:发表于2018-04-11 15:43 被阅读0次

刚刚看到一篇文章介绍的是关于iOS多继承的实现,作者也是用NSProxy实现,但是和我之前的有些不一样,在这里做个补充。
作者的思路也是创建一个NSProxy的类,但是给他设置一个暴露出来的属性和一个转换类型的方法,

@interface Person : NSObject
@property (nonatomic,copy)NSString *name;
@end

#import "Person.h"
@implementation Person
- (void)eat{
    NSLog(@"%@在吃饭",self.name);
}
@end
@interface Student : NSObject
@property (nonatomic,copy)NSString *studentNo;
@end

@implementation Student
- (void)study{
    NSLog(@"好好学习");
}
@end
@interface WJProxy : NSProxy
@property (nonatomic,strong) NSObject *object;
- (id)transformToObject:(NSObject *)object;
@end
#import "WJProxy.h"

@implementation WJProxy
- (id)transformToObject:(NSObject *)object{
    self.object = object;
    return self.object;
}
// 当然这里的消息的标准转发也可以用之前把类的方法名都放在一个字典里,通过判断当前类是否响应要执行的方法,执行转发的流程。
- (NSMethodSignature *)methodSignatureForSelector:(SEL)sel{
    NSMethodSignature *signature ;
    if(self.object){
        signature = [self.object methodSignatureForSelector:sel];
    }else{
        signature = [super methodSignatureForSelector:sel];
    }
    return signature;
}
- (void)forwardInvocation:(NSInvocation *)invocation{
    if(self.object){
        [invocation setTarget:self.object];
        [invocation invoke];
    }
}
@end
- (void)viewDidLoad {
    [super viewDidLoad];
    
    /*DealerProxy *proxy = [DealerProxy dealerProxy];

    [proxy purchaseBookWithTitle:@"swift 进阶"];
    [proxy purchaseClothesWithColor:@"彩虹色"];*/
    
    Person *p = [[Person alloc] init];
    Student *s = [[Student alloc] init];
    
    WJProxy *proxy = [WJProxy alloc];
    
    [proxy transformToObject:p];
    
    Person *person = (Person *)proxy.object;
   
    
    [proxy performSelector:@selector(setName:) withObject:@"小米"];
    person.name = @"小李";
    NSLog(@"%@",person.name);
    [proxy performSelector:@selector(eat)];
    
    [proxy transformToObject:s];
    [proxy performSelector:@selector(study)];
}

我们可以看到这种方式写出来的不仅能调用类方法还能直接使用属性,感觉比之前的方法更为强大。

相关文章

  • 关于 iOS 实现多继承的补充

    刚刚看到一篇文章介绍的是关于iOS多继承的实现,作者也是用NSProxy实现,但是和我之前的有些不一样,在这里做个...

  • category与extension

    category与extension 转载iOS实现多继承的几种方式 转载

  • 关于iOS的多继承

    http://ios.jobbole.com/87856/

  • day17-pygame

    1.复习(补充) 代码示例 补充1:抛出异常 代码示例 运行结果 补充2:多继承 代码示例 注意:多继承的时候,只...

  • 10.22 pygame

    1.复习(补充) 代码示例 补充1:抛出异常 代码示例 运行结果 补充2:多继承 代码示例 注意:多继承的时候,只...

  • iOS 多继承实现方式

    一、单继承与多继承概念 继承是面向对象的基本特征之一,在具体语言的语法上设计有两种形式:多继承与单继承。 1.单继...

  • java接口相关的

    突然发现好久没有更新了 写一点关于java接口的东东吧 关于接口 java中是禁止多继承的 所以要想实现多继承就得...

  • php继承与实现的比较-final、const修饰符说明

    一、继承和实现接口的比较:(1)php继承属于单继承,保证了单一性,但不够灵活。实现接口是对单一继承的补充;(2)...

  • iOS多继承的实现及区别

    简介 多继承可以允许子类从多个父类派生,而Objective-C并不支持多继承,但我们仍可间接实现。 Object...

  • iOS多继承的实现及区别

    来自我的个人博客Minecode.link 多继承可以允许子类从多个父类派生,而Objective-C并不支持多继...

网友评论

      本文标题:关于 iOS 实现多继承的补充

      本文链接:https://www.haomeiwen.com/subject/gfxbvxtx.html