为什么80%的码农都做不了架构师?>>>   

类别与类扩展的区别:

①类别中只能增加方法;

②是的,你没看错,类扩展不仅可以增加方法,还可以增加实例变量(或者合成属性),只是该实例变量默认是@private类型的(作用范围只能在自身类,而不是子类或其他地方);

③类扩展中声明的方法没被实现,编译器会报警,但是类别中的方法没被实现编译器是不会有任何警告的。这是因为类扩展是在编译阶段被添加到类中,而类别是在运行时添加到类中。

④类扩展不能像类别那样拥有独立的实现部分(@implementation部分),也就是说,类扩展所声明的方法必须依托对应类的实现部分来实现。

⑤定义在 .m 文件中的类扩展方法为私有的,定义在 .h 文件(头文件)中的类扩展方法为公有的。类扩展是在 .m 文件中声明私有方法的非常好的方式。

二、正式协议

正式协议从概念上理解起来就简单的多了,它指的是一个以@protocol方式命名的方法列表,与非正式协议相比不同的是,它要求显示的采用协议。

1、正式协议的方法类型

正式协议声明的方法有两种类型的:

①@required

该类的方法在遵守相应协议的类中是必须被实现的,不然编译器会告警(显然这是在编译时做的检查,而不是在运行时)

②@optional

该类的方法在遵守相应协议的类中是否实现是可选的

2、正式协议存在的意义

从字面上理解,正式协议比非正式协议要正式了很多,它存在的意义在于:

正式协议可以将业务中的方法定义剥离出来,形成一个单独的文件,这跟传统OO中的提取接口是不谋而合的。如果遇到二个系统需要交换数据,可以制定一套双方都遵守的协议,然后这二个系统中都把这个协议文件添加到项目中,实现它即可。

转载于:https://my.oschina.net/wb123/blog/651058

Objective-C非正式协议与正式协议相关推荐

  1. Object-C非正式协议与正式协议的区别

    Object-C非正式协议与正式协议的区别 Object-C非正式协议与正式协议的区别 - braddoris的专栏 - 博客频道 - CSDN.NET http://blog.csdn.net/br ...

  2. 非正式协议和正式协议的区别

    这两个概念困扰我很久了,一直都很像搞清楚到非正式协议和正式协议有什么区别和联系,下面结合网上的资料和自己的看法谈谈这个问题. 一.非正式协议 显然这个名词是相对于正式协议而言的.在解释非正式协议之前, ...

  3. OC中的非正式协议与正式协议的区别

    声明:以下内容转自:http://blog.csdn.net/wzzvictory/article/details/9295317# 这两个概念困扰我很久了,一直都很像搞清楚到非正式协议和正式协议有什 ...

  4. 类别,非正式协议,正式协议

    类别,非正式协议,正式协议 1类别: 1.1 不能添加新的实例变量 1.2 如果一定要在类别中使用实例标量,可以使用全局变量 关联 额外变量 注:Cocoa中没有任何真正的私有方法,只要知道对象支持的 ...

  5. 非正式协议与正式协议的区别

    正式和非正式协议 协议有两种类型-正式协议和非正式协议: 非正式协议是NSObject类的范畴类(范畴类是语言特征.通过它,您无需子类化就向某个类增加方法),这意味着几乎所有的对象都是非正式协议的采纳 ...

  6. IOS开发协议使用之──非正式协议和正式协议

    转载地址:http://www.iloss.me/?p=545 协议分非正式协议和正式协议 先说说非正式协议 非正式协议在Obj-c中关键字虽然是interface,但是这个和C#中的借口并不完全相同 ...

  7. 2016 - 2- 2 非正式协议与正式协议

    在重温<OBJC编程基础>这本书时,对于非正式协议的感觉非常陌生,阅读了一篇王中周的博客,结合自己在书中阅读的内容,做一些总结. 一.非正式协议 显然这个名词是相对于正式协议而言的.在解释 ...

  8. OC正式协议和非正式协议

    1.概念 非正式协议,非正式协议是NSObject类(包括它的子类)的类别,其所有的子类都含蓄地接受了这个协议.非正式协议中的方法是否实现都是可选的,因此在调用非正式协议中的方法之前,需要去检查对象类 ...

  9. OC正式协议和非正式协议的区别

    最近看了些关于objective-c的正式协议和非正式协议的内容,发现还是有些混乱,可能是因为还不熟悉OC,对正式协议和非正式协议的使用还不是很熟练,所以想整理一下 非正式协议,是使用类别catego ...

最新文章

  1. 理解Faster R-CNN
  2. 《编码:隐匿在计算机软硬件背后的语言(美)》读书笔记二
  3. [代码整洁]自我感悟
  4. 疯狂ios讲义疯狂连载之实现游戏视图控制器
  5. Unit9 Mangement Strategies—— I
  6. CoInitialize和CoInitializeEx
  7. 浏览器中的WebSocket(ws://127.0.0.1:9988);
  8. pytorch optim.SGD
  9. AI 秒杀人类!OpenAI 击败 DOTA2 世界冠军 OG
  10. Linux服务之DNS服务篇
  11. c语言调用python变量_在c中读取python的全局变量
  12. mysql数据库原理设计与应用在线pdf_MySQL数据库原理、设计与应用
  13. amCharts 5.1.12 Crack
  14. 中央空调系统运行原理以及相关设备介绍
  15. Redis学习之setex命令
  16. 函数的callee和caller的区别和用处
  17. Android Telephony
  18. react类组件中父组件调用子组件函数
  19. 也许狼真的来了,我们该怎么办?
  20. 智慧路灯商业模式分析:智慧灯杆如何盈利?12项盈利模式汇总

热门文章

  1. Lync 小技巧-49-Lync 自动备份-批量管理-用户(免费视频)
  2. server-send event object
  3. 关于Nikon Ai AF 28mm F1.4D遮光罩的问题
  4. Swift之SDWebImage第三方框架
  5. Swift项目引入第三方库的方法
  6. SQLI DUMB SERIES-5
  7. 记录第一次在egret项目中使用Puremvc
  8. Safari 有望支持 WebP
  9. 自定义Counter使用
  10. RedHat Enterprise 5.1下OpenLDAP的配置及PAMNSS的配置