类目category 扩展extension 协议protocol

类的扩展
category种类 类目 定义使用 分类或类目
类的扩展Category 类目或分类  主要作用是给看不见源代码(苹果系统提供的类)的类添加方法
       通过Category 添加的方法会成为元类的的一部分 达到扩展类的功能
通过类目给数组NSArray添加打印方法直接输出中文汉字

#import "NSArray+EasyLog.h"


@implementation NSArray (EasyLog)

-(NSString *)descriptionWithLocale:(id)locale{   //self.count数组个数   字符串无符号长整型unsigned long

    NSMutableString *str = [NSMutableString stringWithFormat:@"%lu(\n",(unsigned long)self.count];

    for (id obj in self) {

        [str appendFormat:@"\t %@,\n",obj];// \t 前进四格

    }

    [str appendFormat:@")"];

    return str;

}

-(void)PrintArrayCount{

    NSLog(@"当前数组元素个数:%lu",self.count);

}

@end


main 函数

NSArray *myLove = [NSArray arrayWithObjects:@"爸爸",@"妈妈",@"弟弟",@"妹妹",@"My刘先生", nil];

//        NSLog(@"%@",myLove);

//        [myLove PrintArrayCount];




//extension(扩展 延展)  Category(类目) 区别

/*        1、作用:

           类目是为没有源代码的类扩展的方法

           延展的作用是管理类的私有方法

        2、格式上

           类目需要定义一个新的.h .m

           延展可以直接写到现有类的.m文件中

*/extension(扩展 延展)在自己类中扩展

#import "Myself.h"


@interface Myself (Myself_Extention)

-(void)myWright;

-(void)myGender;

-(void)myPhone;

-(void)myBankCardPassWord;

@end



@implementation Myself

-(void)myWright{

    NSLog(@"myWright:98");

}


-(void)myGender{

    NSLog(@"myGender:");

}

-(void)myPhone{

    NSLog(@"myPhoneNumber:123456");

}

-(void)myBankCardPassWord{

    NSLog(@"myBankCardPassWord:110");

}

@end

protocol 协议 代理



n/Foundation.h>

//MakeBoyFriend 协议名字

@protocol MakeBoyFriend <NSObject>

//协议中默认是必须实现的

-(void)makeMoney;//会挣钱

-(void)doHouseWork;

-(void)kind;

-(void)tall;

-(void)someTimeAngry;//偶尔不生气

-(void)cook;

-(void)youmo;

-(void)faceBeautiful;//漂亮

@optional  //可选择的 在协议中默认方法必须实现  如果加上@optional 下边的方法可选择实现,实现也可以 不实现也没问题

-(void)washCloth;//会洗衣

-(void)angry;    //生气

@end

#import "LiuXianShen.h"

#import "MakeBoyFriend.h"

@implementation LiuXianShen

-(void)makeMoney{//会挣钱

    NSLog(@"挣钱");

}

-(void)doHouseWork{

    NSLog(@"做家务");

}

-(void)kind{

    NSLog(@"善良");

}

-(void)tall{

    NSLog(@"178");

}

-(void)someTimeAngry{//偶尔不生气

    NSLog(@"不生气");

}

-(void)cook{

    NSLog(@"会做美食");

}

-(void)youmo{

    NSLog(@"幽默风趣");


}

-(void)faceBeautiful{//漂亮

     NSLog(@"帅气,真男人");

}

-(void)washCloth{

    NSLog(@"亲爱的,拿来给你洗");

}//会洗衣

@end


#import "Me.h"

@implementation Me

-(void)hungry{//饿了

    [self.BoyFriend cook];

}

-(void)clothDirty{//衣服脏了

    [self.BoyFriend washCloth];

}

-(void)makeMoney{

    [self.BoyFriend makeMoney];

}//看着愉悦

-(void)lookHappy{

    [self.BoyFriend faceBeautiful];

}

@end


main函数 

LiuXianShen *boy = [[LiuXianShen alloc]init];

        Me *zhaoJiaHui = [[Me alloc]init];

        zhaoJiaHui.BoyFriend = boy;

        //设置代理 LiuXianShen 遵循MakeBoyFriend 协议 boy赋值给右边的我 表明boy已成了你的代理 也就是说boy遵循MakeBoyFriend的协议   这个boy要为我服务

        //协议MakeBoyFriend    遵循协议LiuXianShen   遵循协议的要为我服务

        [zhaoJiaHui hungry];

        [zhaoJiaHui clothDirty];











  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值