iOS·NSObject的两种含义:类与协议

栏目: IOS · 发布时间: 6年前

内容简介:1. 区分:类的NSObject与协议的NSObjectiOS开发中,苹果提供的一些系统类都属于NSObject的子类,例如UIColor类的定义如下所示。

1. 区分:类的NSObject与协议的NSObject

iOS开发中,苹果提供的一些系统类都属于NSObject的子类,例如UIColor类的定义如下所示。

iOS·NSObject的两种含义:类与协议 UIColor

或者自定义的类,也继承自NSObject,例如下图所示。

iOS·NSObject的两种含义:类与协议 自定义类的父类

但是,NSObject不仅仅代表基类,还有协议的意思,我们可以称之根协议,例如下图所示:

iOS·NSObject的两种含义:类与协议 NSObject协议

事实上,从NSObject类的定义可知,NSObject的类本身就遵循NSObject协议,如下图所示。

iOS·NSObject的两种含义:类与协议 NSObject

2. 协议NSObject的用法

  • NSObject协议的定义

iOS·NSObject的两种含义:类与协议 image.png

  • 普通协议的用法

@protocol MyProtocol
- (void)foo; 
@end
  • 继承根协议的用法

@protocol MyProtocol
<nsobject>
  
- (void)foo; 
@end
</nsobject>
  • 多继承的用法

假设你自定义一个继承自UITextField的子类MyTextFeild,同时自定义一个代理MyTextFeildDelegate的属性如下:

@protocol MyTextFieldDelegate 
<nsobject>
 
//...

@property (nonatomic, weak) id 
 <mytextfeilddelegate>
   delegate;
 </mytextfeilddelegate>
</nsobject>

这时候会报错的,因为这个delegate与父类的delegate的协议冲突。一个解决办法是利用协议的多继承:将自定义的协议继承自父类中的协议。

@protocol MyTextFieldDelegate 
<nsobject uitextfielddelegate="">
 

//...
@property (nonatomic, weak) id 
 <mytextfeilddelegate>
   delegate;
 </mytextfeilddelegate>
</nsobject>

3. 拓展

OC里面的类本来是不支持多继承的,但有的面试官还是会问到iOS里面如何实现多继承?除了运行时的办法,还有一种就是通过协议的多继承来实现。

作者:陈满iOS

链接:https://www.jianshu.com/p/1ba089d69c73


以上就是本文的全部内容,希望本文的内容对大家的学习或者工作能带来一定的帮助,也希望大家多多支持 码农网

查看所有标签

猜你喜欢:

本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们

Beginning Apache Struts

Beginning Apache Struts

Arnold Doray / Apress / 2006-02-20 / USD 44.99

Beginning Apache Struts will provide you a working knowledge of Apache Struts 1.2. This book is ideal for you Java programmers who have some JSP familiarity, but little or no prior experience with Ser......一起来看看 《Beginning Apache Struts》 这本书的介绍吧!

HTML 压缩/解压工具
HTML 压缩/解压工具

在线压缩/解压 HTML 代码

URL 编码/解码
URL 编码/解码

URL 编码/解码

HEX HSV 转换工具
HEX HSV 转换工具

HEX HSV 互换工具