iOS基础(3)

7 篇文章 0 订阅
1 篇文章 0 订阅

**

协议(Protocol)

**
一、
因为Objective-C是不支持多继承的,所以很多时候都是用Protocol来代替。Protocol只能定义公用的一套接口,但不能提供具体的实现方法。即它只告诉你要做什么,但具体怎么做,它不关心。

和类的声明很相似,不仅可以声明方法,也可以声明属性property,但是不能定义成员变量。

//属性包含了三样东西:成员变量、setter方法、getter方法

在类中定义的属性上述三者都有,在协议中定义的属性只有获取和设置方法,没有成员变量,这就要求该协议的遵守者必须自己写出settergetter方法的实现。但是有一种情况是不需要的,那就是遵守者本来就有这个属性,此时系统会为这个属性自动生成设置获取方法。


协议也能继承。既可以继承自定义的协议,也可以继承系统的协议。

在定义协议的时候一般都直接继承自<NSObject>

因为这个协议中定义了一些基本的方法,由于我们使用的所有类都继承NSObject这个基类,
而这个基类遵守了<NSObject>这个协议,也就实现了其中的那些方法,这些方法可以由 NSObject及其子类对象调用,
但是在不知道遵守者类型的时候需要用到id <协议名>这样的指针,这个指针在编译期并不知道自己指向哪个对象,唯一能调用的便是协议中的方法,然而有时候又需要用一些基本的方法,比如要辨别id <协议名>这个指针所指的对象属于哪个类,就要用到-isMemberOf:这个方法,而这个方法是<NSObject>这个协议中的方法之一,

所以,我们自定义的协议都需要继承<NSObject>

@protocol Locking <NSObject>

@optional
- (void)lock;

@required //默认
- (void)unlock;

@end

二、protocol 可以写在哪

  1. 写在头文件中:
    可以当做是给这个类添加了一些外部接口。类内部通过self调用,外部也可以调用里面的方法,子类可以实现或者重写里面的方法。

  2. 写在实现文件的类扩展中:
    可以当做是给这个类添加了一些私有接口。在类扩展中,内部可以调用,外部不能调用、子类不能重写实现和重写,相当于是私有方法。

三、protocol 里的方法由谁实现,由谁调用

实现:遵守协议者及其子类

调用:遵守协议者、子类、id <协议名>

四、protocol 有哪些作用,用在哪些地方

  • 某一个类需要委托其他类处理某件事件,最具代表性的便是UITableView的那些代理方法。
    可以:将委托者中的数据传递给代理;将代理的数据传递给委托者;将委托者的事件抛给代理去处理…

  • 给某几个特定的类添加统一的接口,这些接口是从这些类中抽象出的共同的行为,这样便可以减少重复的代码。

tips:
https://www.jianshu.com/p/f93147740bf2
http://blog.csdn.net/zyq522376829/article/details/52201661

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值