关于协议中方法是否实现(可选方法…

本文探讨了Objective-C中协议的作用及其如何确保方法的安全调用。通过使用respondsToSelector方法检查对象是否实现了特定方法,避免了未实现方法调用导致的程序崩溃。此外,文章还解释了@optional和@required预编译指令的区别,并介绍了协议如何用于实现委托模式。
摘要由CSDN通过智能技术生成

MyClass*mc=[[MyClass alloc]init];

    if ([mc respondsToSelector:@selector(otherMethodName)]) {

        [mc otherMethodName];

    }


我们知道,如果一个消息被发送到一个对象,如果这个对象不能处理这个消息,那么一个异常会被抛出(并且应用程序会崩溃)。但一个方法声明一个约定,这个约定表明一个对象能够处理这个消息。如果声明一个可以实现也可以不实现的方法,这是否破坏了这个约定?答案是:Objective-C不仅是动态的,而且是内省的。如果知道某个方法是可选方法的话,那么可以询问一个对象(不管它能不能处理)是否可以处理一个消息,这就保证了可选方法的安全性。

在上面的例子中,respondsToSelector:方法就是判断一个方法是否已经实现。


协议的说明:

(1)协议声明了可以被任何类实现的方法。

(2)协议不是类,他是定义了一个其他对象可以实现的接口。

(3)如果在某个类中实现了协议中的某个方法,也就是这个类实现了那个协议。

(4)协议经常用来实现委托对象。一个委托对象是一种用来协同或者代表其他对象的特殊对象。

(5)新特性的说明

 @optional预编译指令:表示可以选择实现的方法。

  @required预编译指令:表示必须强制实现的方法。


Objective-C在NeXT时期曾经试图引入多重继承的概念,但由于协议(protocol)的出现而没有实现。协议的功能类似于C++中对抽象基类的多重继承,协议本身是多个类共享方法的列表,它本身并不实现这些方法,而让其他类来实现。就是说协议类似于一个公共接口,它规定了多个类之间的接口。

委托(代理)就是基于协议实现的。









评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值