//再设计一个类的时候,有些方法需要对外公开(接口),有些仅供内部使用.

类的扩展:为类添加新的特征(属性)或者方法

对已知类:

1.直接添加

2.继承(在其子类中添加实例变量和方法)

3.使用extension(对私有方法和私有属性的扩展(未在.h中申明的方法就是私有方法))

//   extension

//  一般我们把类的延展直接写在类的.m文件中

//  extension 对私有方法和私有属性的扩展(未在.h中申声的方法)

//  对已知类扩充私有方法,选择 Objective - C file

//  使用时要把头文件引入,类的延展里可以添加类的实例变量

对未知类:

category 分类,类名,为没有源代码的类添加方法,不能添加实例变量

总结:extension 和 category

1.extension为已知类添加私有属性和私有方法.category为没有源代码(未知类)的类添加方法.

2.extension可以添加实例变量(属性),category不能添加实例变量.

3.extension文件可有.h文件, category同时生成一对.h和.m文件

4.extension一般不写代码,写在类的.m文件

总结:  category  和  subclass(子类)

1.category只能为类添加方法,subclass既能为类添加方法又能添加实例变量

2.category新添加的方法成为类的一部分,能被子类继承,subclass新添加的方法只有子类才有,父类不具有

3.category使用原始类的实例(-)或者原始类的调用方法(+),subclass只有子类才能使用

-------------------------------------Protocol  协议-----------------------------------------

只要遵守了协议即可成为代理

代理:自己不想干的事情让比人去做,别人充当的就是代理

如果一个类想要遵守一个协议,直接在.h文件中的父类后加<协议名>在协议里面,写必须遵守的方法和可选择遵守的方法

如:

@protocol BoyfriendProtocol <NSObject>

@required   //必须实现的方法

-(void)makeMoney;

@optional  //可选择的实现

-(void)cook;  
//做饭

-(void)clean; 
//清洁

-(void)funny; 
//幽默

@end

版权声明:本文为博主原创文章,未经博主允许不得转载。

OC基础:类的扩展.协议 分类: ios学习 OC 2015-06-22 19:22 34人阅读 评论(0) 收藏的更多相关文章

  1. linux常用的压缩与解压缩命令 分类: 学习笔记 linux ubuntu 2015-07-05 19:38 38人阅读 评论(0) 收藏

    1.gzip 压缩 gzip 是压缩文件,压缩之后文件后缀为.gz 用法:gzip 选项 [文件] 2.gunzip 解压 这个命令与gzip的功能刚好相反,这个是解压. 用法 gunzip 选项 [ ...

  2. linux中的网络通信指令 分类: 学习笔记 linux ubuntu 2015-07-06 16:02 134人阅读 评论(0) 收藏

    1.write write命令通信是一对一的通信,即两个人之间的通信,如上图. 效果图 用法:write <用户名> 2.wall wall指令可将信息发送给每位同意接收公众信息的终端机用 ...

  3. ubuntu14.04使用root用户登录桌面 分类: 学习笔记 linux ubuntu 2015-07-05 10:30 199人阅读 评论(0) 收藏

    ubuntu安装好之后,默认是不能用root用户登录桌面的,只能使用普通用户或者访客登录.怎样开启root用户登录桌面呢? 先用普通用户登录,然后切换到root用户,然后执行如下命令: vi /usr ...

  4. Raspberry Pi + 3个USB摄像头 + Motion(简易监控设备配置记录1——介绍以及安装) 分类: Raspberry Pi 服务器搭建 2015-04-12 19:21 226人阅读 评论(0) 收藏

    参考: Debian官网链接 Motion官网链接 首先,参见Debian官网链接对Motion的介绍,网页中包含了所有相关依赖包,请首先确保这些依赖包的安装. Motion介绍 摘出对Motion的 ...

  5. linux中echo的用法 分类: 学习笔记 linux ubuntu 2015-07-14 14:27 21人阅读 评论(0) 收藏

    1.echo命令我们常用的选项有两个,一个是-n,表示输出之后不换行,另外一个是-e,表示对于转义字符按相应的方式处理,如果不加-e那么对于转义字符会按普通字符处理. 2.echo输出时的转义字符 \ ...

  6. shell脚本调试 分类: 学习笔记 linux ubuntu 2015-07-14 12:49 53人阅读 评论(0) 收藏

    1.sh -x script 这将执行脚本并显示所有变量的值 如,脚本: #!/bin/bash #a test about shift if [ $# -le 0 ] then echo " ...

  7. shell入门之函数应用 分类: 学习笔记 linux ubuntu 2015-07-10 21:48 77人阅读 评论(0) 收藏

    最近在学习shell编程,文中若有错误的地方还望各位批评指正. 先来看一个简单的求和函数 #!/bin/bash #a test about function f_sum 7 8 function f ...

  8. shell入门之流程控制语句 分类: 学习笔记 linux ubuntu 2015-07-10 16:38 89人阅读 评论(0) 收藏

    1.case 脚本: #!/bin/bash #a test about case case $1 in "lenve") echo "input lenve" ...

  9. shell入门之变量测试 分类: 学习笔记 linux ubuntu 2015-07-10 15:49 31人阅读 评论(0) 收藏

    格式:test 测试条件 字符串测试: 注意空格: test str1 == str2 测试字符串是否相等 test str1 != str2 测试字符串是否不相等 test str1 测试字符串是否 ...

  10. shell脚本实现冒泡排序 分类: 学习笔记 linux ubuntu 2015-07-10 14:16 79人阅读 评论(0) 收藏

    手动输入一行字符串,并对其排序. 脚本如下: #!/bin/bash #a test about sort echo "please input a number list" re ...

随机推荐

  1. 【NOI2013】小Q的修炼

    题目链接:http://uoj.ac/problem/123 又开提答坑啦,要不是一定要讲题谁他妈要这样伤害自己 CASE 1,2 首先可以打一个通用暴力,用于模拟操作过程,对于每一个操作随机一个选择 ...

  2. JS身份证验证

    window.checkIdcard = function (idcard) { var errors = new Array( "yes", "请检查输入的证件号码是否 ...

  3. MongoDB(课时11 嵌套集合)

    3.4.2.6 嵌套集合运算 MongoDB数据库里每个集合数据可以继续保存其它的集合数据.例如:有些学生信息中需要保存家长信息. 范例: 增加数据 db.students.insert({" ...

  4. C# DataTable按指定列排序

    C#提供的内置对象DataTable功能特别的强大,如果我们需要对DataTable中的某一列进行排序怎么处理呢,具体代码如下: DataTable dt = new DataTable(); dt. ...

  5. m_Orchestrate learning system---三十三、公共变量多弄成全局变量

    m_Orchestrate learning system---三十三.公共变量多弄成全局变量 一.总结 一句话总结:比如班级id,小组id,这样省事,而且减少数据库的访问,加快访问速度,而且节约代码 ...

  6. java克隆机制

    看了下面博客就很明白了 http://www.cnblogs.com/Qian123/p/5710533.html#_label0 java对象创建方式有三种: 1.通过new对象 2.通过java克 ...

  7. hdu-1892-二维BIT

    See you~ Time Limit: 5000/3000 MS (Java/Others)    Memory Limit: 65535/32768 K (Java/Others)Total Su ...

  8. 万恶的deferred_segment_creation(延迟块分配)

    11gR2开始,空表是不分配segment的.由于没有分配 segment, EXP默认不能导出空表,user_objects有该对象但是 user_segment没有该对象

  9. Leetcode 86

    /** * Definition for singly-linked list. * struct ListNode { * int val; * ListNode *next; * ListNode ...

  10. BUCTOJ1073

    #include "iostream" #include "algorithm" using namespace std; ; struct Time { in ...