OC 提供了单继承 (Inheritance), Category, Extension, Protocol 这几种基本的类与对象层面的复用机制,作一小结。

在这几个机制中,继承提供了纵向的复用,可以扩展属性变量和方法,而 Category 只可以扩展方法,Extension 仅在拥有源代码的情况下可以使用,可扩展属性变量和方法,而 Protocol 则是仅仅提供抽象接口,类似于 C++ 中的抽象类模版。深入一点,继承的时候类实例的内存布局也同时被继承下来,而且这个布局是在编译时就决定了,在运行时不能改变,但是方法是保存在类的全局对象中的,可以在运行时 增加类的方法,这就是 Category(这个和JS里面的原型链比较相似)。因为OC里面的@implementaion ... @end 块隐含了类的构造方法和析构方法,以及属性变量的定义等,所以,OC的一个类的方法是要在一个源文件里面定义完毕的,不能像C/C++那样分散到不同的源文件进行编译,但是 Category 的@implementation ... @end 块是不隐含类的构造方法和析构方法的,这样,我们就可以在一个类上面创建多个Category,而且一个 Category 的定义(实现)可以分布在不同的源文件中,这就提供了一种构造大而复杂的类的方法(虽然不一定大家都喜欢)。Extension 的本质是匿名Category,它只有声明,而且可以多次声明,定义(实现)是在类的源文件里面进行的,在编译的时候同时也要编译类的源文件,同时在 Extension 的头文件中可以添加属性变量,这些变量只能在类的实现源文件中使用,否则编译器报错,所以,一般用来作为隐藏私有变量来使用。当某些类具有某个方面的共同操作时,这些共同操作可以抽象出 Protocol,可以理解为操作上的类 属,因为是抽象的,只有声明,没有定义或者实现,同时因为是类属,所以,一个类可以实现多个 Protocol 。OC 程序可以指定某个Protocol 的类型,比如 id<some_protocol> ,这个和C++里面的抽象类模板有点相似,最新版的LLVM也已经支持OC的范型编程了。

简而言之,继承提供了类型的数据与方法的复用,Category 提供了增加类型方法的途径,属于类型的增强,Extension 则提供了类型的私有数据的途径,Protocol 则是提供了类型的类属合约,不过它并不能生成类型。如果要使用类型生成,则可以使用Objective-C++中的模版。

Objective-C 里面的类对象复用小结的更多相关文章

  1. Java 继承、多态与类的复用

    摘要: 本文结合Java的类的复用对面向对象两大特征继承和多态进行了全面的介绍. 首先,我们介绍了继承的实质和意义,并探讨了继承,组合和代理在类的复用方面的异同.紧接着,我们依据继承引入了多态.介绍了 ...

  2. Python学习day26-面向对象之小结

    figure:last-child { margin-bottom: 0.5rem; } #write ol, #write ul { position: relative; } img { max- ...

  3. 18.Java 封装详解/多态详解/类对象转型详解

    封装概述 简述 封装是面向对象的三大特征之一. 封装优点 提高代码的安全性. 提高代码的复用性. "高内聚":封装细节,便于修改内部代码,提高可维护性. "低耦合&quo ...

  4. C++ 类对象和 指针的区别

    C++ 类对象和 指针的区别 C++ 类对象和 指针的区别 转自:http://blog.csdn.net/ym19860303/article/details/8557746 指针的情况 class ...

  5. Android 通过 Intent 传递类对象或list对象

    (转:http://www.cnblogs.com/shaocm/archive/2013/01/08/2851248.html) Android中Intent传递类对象提供了两种方式一种是 通过实现 ...

  6. NSLog(@"%@",类对象); 默认输出类名

    NSLog()函数输出Objective-c对象时,输出的是该对象的description方法的返回值.也就是说,以下两行代码作用完全一样(假设p是指向任何对象的指针变量). NSLog(@" ...

  7. WPF整理-XAML构建后台类对象

    1.XAML 接触WPF的第一眼就是XAML---XAML是用来描绘界面的.其实不然! "Actually, XAML has nothing to do with UI. It's mer ...

  8. class中new与未new的区别 类对象占用空间--转载

    转载自http://blog.sina.com.cn/shuiwuhendeboke    颗颗的博客 (1)作用域不同 不用new:作用域限制在定义类对象的方法中,当方法结束时,类对象也被系统释放了 ...

  9. 规则引擎集成接口(九)Java类对象

    Java类对象 右键点击“对象库” —“添加java类对象”,如下图: 弹出窗体,在文本框中输入类的全名“com.flagleader.test.Test”,选择该类型后确定,如下: 显示如下,勾选上 ...

随机推荐

  1. [办公应用]从美国带回来的兄弟牌brother打印机如何处理

    周末帮朋友去调一台国外带回来的brother一体机,型号MFC-J630W.这是她单位老板从国外带回来的,说是便宜:不过她说只有英文说明书,她不太会操作.我想这还不容易么,就满口答应下来了.我先到br ...

  2. 局域网内PC通过笔记本共享上网

    现实:PC.笔记本都通过网线接在局域网内,局域网无法上网:笔记本有无线网卡,可连WIFI上网. 现在想让PC通过笔记本来共享上网. 步骤: 1.笔记本开启DHCP.方法是开启"服务" ...

  3. javascript闭包的应用

    我印象中,javascript的闭包属于进阶的范畴,无非是用来在面试中装装逼而已.你看我身边的一个小伙子,有一天我装逼地问他什么是javascript的闭包,他居然连听都没听说过.但他做起前端的东西来 ...

  4. 百度AI的语音合成,语音识别

    1,语音的合成,识别 后端代码: from aip import AipSpeech, AipNlp import os # 语音合成 """ 你的 APPID AK S ...

  5. Trie(前缀树)和ternary trie和binary search tree

    1 什么是trie trie是一棵多叉树,假如存放的是由26个字母(不区分大小写)构成的字符串的话,那么就是一棵26叉树. trie树是一棵前缀树,因为每个结点只保存字符串中的一个字符,整个字符串保存 ...

  6. 反爬统计 数据库 sql CASE

    -- 经排查日志,发现ordertest.com下的url检测,频繁<Response [403]>,Forbidden;再进一步查询数据库数据:逐日统计错误临时表test_error_t ...

  7. 浅谈UML的概念和模型之UML视图

    相信大家都知道UML的全称,统一建模语言(UML是 Unified Modeling Language的缩写)是用来对软件系统进行可视化建模的一种语言.UML为面向对象开发系统的产品进行说明.可视化. ...

  8. 连通图(Tarjan算法) 专题总结

    一.题目类型: 1.有向图的强连通分量: POJ1236 Network of Schools HDU1269 迷宫城堡 2.割点 & 割边: UESTC - 900 方老师炸弹 UVA315 ...

  9. IIS application pool access desktop denied

    https://stackoverflow.com/questions/5437723/iis-apppoolidentity-and-file-system-write-access-permiss ...

  10. YTU 2900: F-A Simple Question

    2900: F-A Simple Question 时间限制: 1 Sec  内存限制: 128 MB 提交: 66  解决: 24 题目描述 今天,pasher打算在一个浪漫的花园和他的搭档们聚餐, ...