Protocols

Protocol 相当于 .Net 和 Java 中的 interface

protocol 声明

@protocol ProtocolName

// list of methods and properties

@end

 

protocol 中可以声明实例属性和方法,也可以声明class属性和方法(相当于 .Net 和 Java 中的静态属性和静态方法)

protocol 的注入:

@interface ClassName : NSObject

@property (weak) id <ProtocolName> obj;

@end

 

默认情况下,protocol中定义的方法和属性都是required的,继承了protocol的类必须实现这些required的方法和属性。可以用optional关键字在protocol中定义一些不用必须实现的方法或属性

@protocol NothinProtocal

- someMethod;

@optional

- optionalMethod;

@end

 

在调用optional方法之前,需要先检查类对象是否实现了该方法,例如

if([Self.obj respondsToSelector:@selector(optionalMethod)]){

  [self.obj optionalMethod];

}

 

因为respondsToSelector方法是在NSObject这个protocol中定义的,所以NothinProtocal需要继承NSObject. 否则上述代码会编译失败

protpcol的继承:

@protocol ProtocolName <NSObject>

...

@end

 

实现protocol:

@interface ClassName : NSObject <protocol1, protocol2, protocol3, ...>

...

@end

转载于:https://www.cnblogs.com/SuuuperPig/p/3867730.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值