美文网首页
OC-Catagory实现多继承

OC-Catagory实现多继承

作者: 紫云夕月 | 来源:发表于2021-08-25 15:36 被阅读0次
#import "ViewController.h"
#import "Programmer.h"
#import "Programmer+Program.h"
#import "Student.h"

@interface ViewController ()

@end

@implementation ViewController

- (void)viewDidLoad {
    [super viewDidLoad];
    self.title = @"首页";
    
    Programmer * grammer = [Programmer new];
    grammer.title = @"zhaoxd";
    NSLog(@"title---%@",grammer.title);
    [grammer draw];
    [grammer sing];
    
    Student * student = [Student new];
    student.content = @"baidi";
    NSLog(@"title---%@",student.content);
    [student draw];
    [student sing];
}
@end
#import <Foundation/Foundation.h>

@interface Programmer : NSObject

@end
#import "Programmer.h"

@implementation Programmer

@end
#import "Programmer.h"

@interface Programmer (Program)
// 声明属性
@property (nonatomic, assign) NSString * title;
@property (nonatomic, assign) NSString * content;
// 声明公有方法
- (void)draw;
- (void)sing;
@end
#import "Programmer+Program.h"
#import <objc/runtime.h>

@implementation Programmer (Program)
// 为Catagory添加属性
//set方法
- (void)setTitle:(NSString *)title{
    objc_setAssociatedObject(self, @selector(title), title, OBJC_ASSOCIATION_RETAIN_NONATOMIC);
}
//get方法
- (NSString *)title{
    return objc_getAssociatedObject(self, @selector(title));
}

//set方法
- (void)setContent:(NSString *)content{
    objc_setAssociatedObject(self, @selector(content), content, OBJC_ASSOCIATION_RETAIN_NONATOMIC);
}
//get方法
- (NSString *)content{
    return objc_getAssociatedObject(self, @selector(content));
}

// 私有方法
- (void)program {
    NSLog(@"I'm writing bugs!");
}
// 实现公有方法
- (void)draw {
    NSLog(@"I can draw");
}
- (void)sing {
    NSLog(@"I can sing");
}
@end
#import "Programmer.h"

@interface Student : Programmer

@end
#import "Student.h"

@implementation Student
// 实现公有方法
- (void)draw {
    NSLog(@"Student can draw");
}
- (void)sing {
    NSLog(@"Student can sing");
}
@end

相关文章

网友评论

      本文标题:OC-Catagory实现多继承

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