Object-C语言类的扩展

一、Category

     1、Category:也叫分类,类目。是为没有源代码的类扩充功能。扩充的功能会成为原有类的一部分,可以通过原有类或者原有的对象直接调用,并且可继承。

2、注意:

1)该方式只能扩充方法,不能扩充实例变量,@property(可能编译不报错,但是运行有问题)。

2)分类可以访问原来类中的成员。

3)如果分类和原来类出现同名的方法,优先调用分类中的方法,原来类中的方法会被忽略。

4)多个类目中有同名的方法的时候执行的是最后编译的那个类目的同名方法。

  

  

  

二、Extension

     1、为能够获得源代码的类添加私有的实例变量和方法。

2、注意:延展操作的类必须是能够获得源代码的类(具有.m文件的类)。

3、Category和Extension的区别

1)作用不同:Category是扩展类的功能的,Extension是用来给类声明私有方法和实例变量的

2)Category存放在一堆.h .m文件中,Extension存放在.m文件中

3)Extension可以添加实例变量,Category不可以

    

    

三、delegate设计模式

     1、delegate设计模式的使用我们首先需要明白三个要素-委托方,代理方,协议。

1)委托方:委托别人去执行某些操作的人(对象)。

2)协议(Protocol):委托方需要代理方执行的操作。

3)代理方:被委托去执行某些操作的人(对象)。

2、协议是一套标准(一堆方法的声明),只有.h文件。协议的定义以@protocol开始,以@end结束。比如:声明一个结婚协议。

  @protocol MarryProtocol <NSObject>

  @required
  - (void)makeMoney; // 赚钱
  @optional
  - (void)cooking; // 做饭

  @end

3、

1)步骤1:委托方制定一套协议(在委托方的.h文件中),协议中声明委托方需要让代理方执行的方法(只有方法声明)。

2)步骤2:委托方声明一个delegate属性(assign修饰),存储代理方对象。

3)步骤3:代理方需要遵守协议,并且对协议中的方法进行实现。

4)步骤4:将代理方设置为委托方的代理人(将代理方对象赋值给委托方对象的delegate属性,进行存储)。

5)步骤5:委托方在合适的时机通知代理方对象去执行相应的操作。

注:respondsToSelector:该方法判断对象是否能够对某一个选定的方法做出响应。

  

时间: 2024-10-09 11:20:52

Object-C语言类的扩展的相关文章

模块的封装之C语言类的封装

[微知识]模块的封装(一):C语言类的封装 是的,你没有看错,我们要讨论的是C语言而不是C++语言中类的封装.在展开知识点之前,我首先要 重申两点: 1.面向对象是一种思想,基本与所用的语言是无关的.当你心怀面向对象时,即使使用QBasic也能写 出符合面向对象思想的代码,更不要说C语言了.举一个反例,很多人初学C++的时候,并没有掌 握面向对象的思想,活生生的把类当结构体来使用的也不在少数吧. 2.面向对象的最基本的出发点是“将数据以及处理数据的方法封装在一起”,至于继承.派生.多态之类 的则

ASP.Net string 类的扩展方法 [转]

string 类的扩展方法列表(基本相同于 IEnumerable<T> 接口的成员列表): Aggregate<>     //累加 All<>        //是否都满足条件 Any<>        //是否有一个满足条件 AsEnumerable<>  // AsParallel<>    // AsQueryable<>    // Average<>      //平均值 Cast<>

Object(所有类的超类)一些有用的方法讲解与实例演示

Object是所有类的始祖,java中的每个类的都是它拓展而来的. Object的euqals方法.hashCode方法.getClass方法和toString方法在操作对象时是非常有用的方法.     1.euqals方法      euqals方法用于检测一个对象是否等于另外一个对象(两个对象是否指向同一块存储区域),java语言规范要求euqals方法具有以下特性: 自反性.对称性.传递性.一致性并且对于任意的非空引用x,x.equals(null)应返回false. java7在java

JavaScript学习总结(十四)——JavaScript编写类的扩展方法

在?J?a?v?a?S?c?r?i?p?t?中?可以使?用?类的p?r?o?t?o?t?y?p?e属性来?扩?展?类的属?性?和?方?法,在实际开发当中,当JavaScript内置的那些类所提供的动态方法和动态属性不满足我们实际开发时,我们就可以通过"prototype"属性给自定义类添加方法和属性或者扩展原有的类中的方法和属性. 一.扩展JavaScript内置类,添加动态方法 语法格式: 类名.prototype.方法名 = function([param1],[param2],.

是否存在不继承自System.Object类型的类

分析问题 可能读者的固有思维认为.NET中所有的类型都必须继承自System.Object,这样的认识过于绝对,且不完全正确.在.NET中,.NET设计小组为中间语言的编译器ILasm.exe添加了noautoinherit开关,当这个开关被打开时,编译器将不会默认年地把类型认为继承自System.Object. 首先介绍一下中间语言的编译工具:ILasm.exe.这是.NET Framework提供的一个编译工具,它的作用是把中间语言(MSIL)编译成可执行的PE文件.该工具非常有用,它不仅使

类的扩展--类目--ios

person+money.h  这是类目类 #import "Person.h" //这是扩展person类的接口类,独立一个文件 @interface Person (Money) -(void) haveMoney; @end person+money.m 这是类目类 #import "Person+Money.h" //这是扩展person类的实现类,独立一个文件 @implementation Person (Money) -(void) haveMoney

模块的封装之C语言类的继承和派生

[交流][微知识]模块的封装(二):C语言的继承和派生 在模块的封装(一):C语言的封装中,我们介绍了如何使用C语言的结构体来实现一个类的封装,并通过掩码结构体的方式实 现了类成员的保护.这一部分,我们将 在此的基础上介绍C语言类的继承和派生.其实继承和派生是一个动作的两种不同角度的表达 .当我们继承了一个基类而创造了一个新类时,派生的概念就诞生了.派生当然是从基类派生的.派生出来的类当然是继承了基类的 东西.继承和派生不是一对好基友,他们根本就是一个动作的两种不同的说法,强调动作的起始点的时候

通讯聚合类Chrome 扩展:All-in-One Messenger,把主流聊天服务聚合在一个应用窗口内

原文地址:http://whosmall.com/?post=420 本文标签: Chrome扩展 Chrome浏览器 通讯聚合类Chrome扩展 All-in-One-Messenger 主流聊天服务聚合 我发现了 All-in-One Messenger,它是一款轻量的 Chrome 扩展,作用与 Franz基本相同,只需要打开一个窗口,所有的通讯服务会以网页标签栏的形式呈现,方便你自如切换,可以大大提高了沟通的效率.但是和「庞大」的 Franz 相比,All-in-One Messenge

ios开发类的扩展

类扩展常见方法:定义子类.遵循协议.使用分类.源文件拓展. 源文件拓展:语法:在声明@implementation前添加 @interface 类名() .... @end 分类Category 向现有类中添加方法时添加子类不方便 分类是对现有类的扩展,分类只扩展方法,不扩展属性 协议Protoccol 可以用来声明一大堆方法 只要某个类遵循了这个协议,就相当于拥有了这个协议中的所有方法声明