oc基础之分类与协议(五)

来源:互联网 发布:bot的知识图谱数据api 编辑:程序博客网 时间:2024/05/29 10:10

例9:设计一个程序,要求包含分类和协议。

模块一

1.1 定义协议的源代码

//定义协议

#import <Foundation/Foundation.h>

@protocol doThings <NSObject>

//必须要实现的方法

@required

-(void)eat;

-(void)walk;


//可以选择实现的方法

@optional

-(void)work;

-(void)date;

@end

1.2 知识点拓展
    1)@required和@optional是协议声明中的2个关键字,@required-->方法必须实现(若不实现,编译器发出警告);
@optional-->方法不一定实现。
     2)协议默认采纳NSObject的协议


模块二
2.1 类的声明的源代码

#import <Foundation/Foundation.h>

//引入要采纳的协议

#import "doThings.h"

//person类的声明

@interface person : NSObject<doThings>

@property int age;

@end


//分类的声明

@interface person (study)

-(void)study;

@end

2.2 知识点拓展
    1)@property的增强使用-->只使用@property进行声明,类自动帮你实现。
    2)Category分类的概念和作用-->Category是oc特有的语法。作用:在不修改原有的类别的基础上增加新的方法;一个庞大的类可以分模块开发,可以有多个人来编写,更有利于团队合作。
    3)类的命名规则-->类名+扩展方法;类的借口声明和类的定义十分相似,但不继承父类,只需要带有一个括号,表示该类别的主要用途。
    4)不允许在类别中增加变量,只可以添加方法。

模块三
3.1 类的实现的源代码
//person类的实现

#import "person.h"

@implementation person

//必须实现的方法

-(void)eat

{

    NSLog(@"人正在吃东西");

}

-(void)walk

{

    NSLog(@"人可以跑步");

}

//可以选择实现的方法

-(void)work

{

    NSLog(@"人需要工作");

}

@end


//分类的实现

@implementation person (study)

-(void)study

{ 

    NSLog(@"age %d的人必须喜欢学习",_age);

}

@end

3.2 知识点拓展

   1)分类的实现-->新方法的实现必须写在@impementation与@end之间。

   2)分类的使用主要事项-->分类只能增加方法,不能增加成员变量和@property;分类可以访问原来类中的成员变量;若分类和原来类出现同名的方法,优先调用分类中的方法;

   3)非正式协议-->NSObject类创建的分类又叫非正式协议。非正式协议一半不需要进行实现,一半在子类中进行方法的重写。


模块四

4.1 主函数的源代码

#import <Foundation/Foundation.h>

#import "person.h"

#import "doThings.h"

int main(int argc,constchar * argv[]) {

    @autoreleasepool

    {

        //创建一个对象

        person *p = [personnew];

        p.age = 18;

        //调用对象方法

        [p eat];

        [p work];

        [p walk];

        //调用分类的对象方法

        [p study];

    }

    return 0;

}

4.2 知识点拓展
      1)调用类别中的方法-->与一般成员方法调用形式完全一样,需要包含类别的头文件。


学习心得

     1)在学习分类和协议的时候,觉得不仅它们之间有很多相似点,跟继承也很相似。在这篇博文中,通过比较学习,对相关知识掌握会更加深刻。

      2)在分类和协议中,都只能增加方法,不能增加成员变量;而前面学习到的封装,则只对成员属性进行初始化和值的获取。这也是我在学习过程者的一个意外的收获。

1 0
原创粉丝点击
热门问题 老师的惩罚 人脸识别 我在镇武司摸鱼那些年 重生之率土为王 我在大康的咸鱼生活 盘龙之生命进化 天生仙种 凡人之先天五行 春回大明朝 姑娘不必设防,我是瞎子 九游代金券锁定怎么办 被娱乐天地骗了怎么办 win8更新失败无法开机怎么办 安装英雄联盟文件损坏怎么办 电脑玩lol运行内存不足怎么办 守望先锋账号冻结了怎么办 守望先锋服务器发生意外错误怎么办 在先锋社保缺一年上学怎么办 lol更新后反应很慢怎么办 电脑跳舞毯不正常电脑游戏怎么办 PS中缺失的字体怎么办 黑板墙不想要了怎么办 淘宝代练打坏了怎么办 绝地求生与ipad不兼容怎么办 小米手机玩绝地求生卡怎么办 绝地求生服务器目前非常繁忙怎么办 玩绝地求生手机发烫怎么办 绝地求生刺激战场延迟高怎么办 怀孕八个半月打喷嚏头疼怎么办 20岁打喷嚏漏尿怎么办 鼻炎犯了不停打喷嚏怎么办 鼻炎犯了不停打喷嚏流鼻涕怎么办 感冒鼻痒怎么办小窍门 腰扭了屁股也疼怎么办 小三把房子过户怎么办 小三把房子卖了怎么办 打印机ip地址变了怎么办 电脑ip地址错误不能上网怎么办 修改了注册表电脑无法启动怎么办 香水喷到衣服上有印怎么办 家里一股猫的味道怎么办 干菊花里面有虫怎么办 安装时显示程序已关闭怎么办 电脑一直重启开不了机怎么办 应用安装在sd卡打不开怎么办 安装ps打不开安装包怎么办 安装好的软件打不开怎么办? win10系统语言修改不了怎么办 一个月婴儿吵夜怎么办 玩游戏一直闪退怎么办 钱站一直闪退怎么办