类目、延展、协议

@Class 类名; //编译时只有这个类(不包括该类的变量、方法)。常用于复合对象和循环依赖问题中。

id <协议名> _delegate;//代理(实现协议的对象)。

类目、延展、协议都是针对方法。


 类目

类目作用:通过创建类目可以为现有的类添加新的方法。

类目只能给已有的类添加方法,无法添加实例变量,此时可以通过字典类型的参数解决。

类目的方法和已有类的方法名称冲突时,类目中的方法会覆盖原有的方法。

通过类目给一个新类添加新方法来扩展这个类不仅影响这个类,同时会影响他的子类,因为他的每个子类都将继承这些新方法。若为NSObject添加类目(即非正式协议)。


延展

方法不在.h头文件声明,直接在.m定义这个方法,相当于私有方法。


 协议

步骤:中介中心登记注册-》委托者委托消息


 协议SaleHuse

SaleHuse.h

类目、延展、协议
#import <Foundation/Foundation.h>

@protocol SaleHouse <NSObject>

//@required
-(void)saleHouse;
-(void)payMoney;
@end
类目、延展、协议

HouseSaler.h

类目、延展、协议
#import <Foundation/Foundation.h>

#import "SaleHouse.h"

@class Landlord;

@interface HouseSaler : NSObject <SaleHouse>
{
    Landlord *_customer;
}

@property(retain,nonatomic)Landlord *customer;

-(void)registerInfo:(Landlord *)aCustomer;
@end
类目、延展、协议

HouseSaler.m

类目、延展、协议
#import "HouseSaler.h"
#import "Landlord.h"
@implementation HouseSaler
-(void)saleHouse
{
    NSLog(@"我是中介,我替登记者卖房");
    [self payMoney];
}

-(void)payMoney
{
    NSLog(@"我是中介,我卖了房了");
    [self.customer receiveMoney];
}

-(void)registerInfo:(Landlord *)aCustomer
{
    self.customer = aCustomer;
    self.customer.delegate = self;//代理传值?
}
@end
类目、延展、协议

Landlord.h

类目、延展、协议
#import <Foundation/Foundation.h>
#import "HouseSaler.h"
@interface Landlord : NSObject
{
    id<SaleHouse> _delegate;//代理(实现协议的对象)
}

@property(nonatomic,retain)id<SaleHouse> delegate;

-(void)saleHouse;
-(void)receiveMoney;

@end
类目、延展、协议

Landlord.m

类目、延展、协议
#import "Landlord.h"

@implementation Landlord
@synthesize delegate = _delegate;

-(void)saleHouse
{
    NSLog(@"我是房东,我已经将房子登记到中介了");

    if ([self.delegate conformsToProtocol:@protocol(SaleHouse)])
    {
        [self.delegate saleHouse];
    }
    
}

-(void)receiveMoney
{
    NSLog(@"我是房东,钱我收下了,谢谢中介了");
}
@end
类目、延展、协议

AppDelegate.m

Landlord *landlord = [[Landlord alloc]init];
    
    HouseSaler  *houseSaler = [[HouseSaler alloc]init];
    
    [houseSaler registerInfo:landlord];//房东到中介注册成客户
    [landlord saleHouse];

类目、延展、协议

上一篇:阿根廷探戈预热“环球春晚”(图)_网易新闻中心


下一篇:【比赛题解】CSP2021 提高组题解