iOS学习(OC语言)知识点整理

一、关于协议(Protocol)的介绍

1)概念:协议指多个对象之间协商的一个接口对象,协议提供了一些方法用在协议的实现者和代理者
      之间通讯的一种方式

2)声明一个协议@protocol协议的名字<基协议> 一个协议可以遵守另一个协议:
      基协议(这个协议就拥有了基协议中所有方法的声明)

3)协议中不能声明成员变量,只能有方法声明。

4)协议中声明方法,默认是required 表明方法是必须要实现的,否则会有系统警告,但不会报错

5)协议中@optional表明方法是可选的(可以实现也可以不实现)

6)使用协议:某个类遵守协议,类名后面<协议名> ;所谓遵守协议就是:类拥有了协议中所有方法的声明,
      必须实现协议中规定的方法;一个类可以遵守多个协议(类拥有所有协议中声明的方法,必须实现所有
      协议中规定的方法)

7)一个协议可以遵守另一个协议,遵守协议后就拥有了另一个协议所有方法的声明,同时还可以添加自己的方法

8)一个协议可以遵守多个协议,并拥有所有基协议的方法

9)协议的声明与使用方法 实例代码:
 
    1、添加一个基于Protocol命名为MyProtocol的.h 文件  声明一些协议方法 例如:

 #import <Foundation/Foundation.h>
@protocol MyProtocol <NSObject>
//协议中不能声明成员变量,只有方法
//{
// int _a;
//}
//协议中声明方法,默认是required
-(void)test1;
-(void)test2;
//@required表明方法是必须要实现的
@required
-(void)test3;
//@optional表明方法是可选的(可以实现也可以不实现)
@optional
-(void)test4;
@end

2、定义一个Person类 在.h文件中使用协议MyProtocol  例如:

 #import <Foundation/Foundation.h>
#import "MyProtocol.h"
@interface Person : NSObject<MyProtocol>
@property(nonatomic,copy)NSString *name;
-(void)print;
@end

3、在Person类的.m文件中实现协议方法 例如:

    #import "Person.h"
@implementation Person
-(void)print
{
NSLog(@"person:%@",self.name);
}
//实现协议中规定的方法
-(void)test1
{
NSLog(@"test1");
}
-(void)test2
{ }
-(void)test3
{ } @end

4、在main文件中执行方法 例如:

  Person *p1=[[Person alloc]init];
//判断p1所属的类是否遵守了协议
if([p1 conformsToProtocol:@protocol(MyProtocol)]){
//判断p1所属的类是否实现了方法
if([p1 respondsToSelector:@selector(test1)]){
[p1 test1];
}
} NSObject *obj1=[[NSObject alloc]init];
obj1=nil;
NSObject *obj2=@"hello";
obj2=nil;
//对obj3指向的对象做一个限制
NSObject<MyProtocol> *obj3=@"abc";
//obj4可以指向任意类型的对象,但是必须遵守MyProtocol协议
id<MyProtocol> obj4=[[Person alloc]init];
Person<MyProtocol> *obj5=[[Person alloc]init];

10)OC中没有多继承,但可以通过协议实现,可通过使用多个协议来实现类似多继承的方法。

11)协议主要用来统一规范接口;统一接口的方法:继承和协议

12)协议与继承的区别
     
    1、继承也可以统一规范接口:子类继承父类所有的方法(可以不用重写,除非父类的方法不适合子类),
         重写后的方法名与父类一样,达到了统一接口的目的;子类中可以增加成员变量
 
    2、协议:一个类遵守协议,类就具有协议中所有的方法,如果多个类都遵守同一个协议,这些类都有协议
         中规范的方法,达到了统一接口的目的;协议中不能有成员变量

iOS阶段学习第19天笔记(协议-Protocol)的更多相关文章

  1. iOS阶段学习第21天笔记(ARC内存管理-Copy-代理)

    iOS学习(OC语言)知识点整理 一.OC 中的ARC内存管理 1)ARC中释放对象的内存原则:看这个对象有没有强引用指向它 2)strong:强引用,默认情况下的引用都是强引用 3) weak:弱引 ...

  2. iOS阶段学习第29天笔记(UITextField的介绍)

    iOS学习(UI)知识点整理 一.关于UITextField的介绍 1)概念: UITextField 是用于接收用户输入的一个控件 2)UITextField  初始化实例代码: //创建一个UIt ...

  3. iOS 阶段学习第七天笔记(函数、递归)

     iOS学习(C语言)知识点整理笔记 一.函数 1)概念:具有特定功能的代码块的封装 2)函数的定义: 函数类型+函数名(形参列表) 函数类型 函数名(形参类型1  形参名1,形参类型2   形参名2 ...

  4. iOS阶段学习第三天笔记(运算符)

    iOS学习(C语言)知识点整理笔记 1.运算符 一.算术运算符 1)表达式由变量.常量.运算符构成,有确定的类型和值 2)算术运算符包括: +(加),-(减),*(乘),/(除),%(模) 3)算术运 ...

  5. iOS 阶段学习第三天笔记(运算符)

    iOS学习(C语言)知识点整理笔记 1.运算符 一.算术运算符 1)表达式由变量.常量.运算符构成,有确定的类型和值 2)算术运算符包括: +(加),-(减),*(乘),/(除),%(模) 3)算术运 ...

  6. iOS阶段学习第32天笔记(页面传值方法介绍)

    iOS学习(UI)知识点整理 一.界面传值方法 1.方法一  Block传值  通过SubView视图的Block向View视图传值改变View视图的背景色 实例代码: 1)SubViewContro ...

  7. iOS阶段学习第30天笔记( UIViewController—Delegate(代理) )

    iOS学习(UI)知识点整理 一.UIViewController的介绍 1)概念:UIViewController 即视图控制器,用来管理和控制页面跳转的一个类 ,iOS里面采用了MVC的体系结构, ...

  8. iOS阶段学习第20天笔记(MRC内存管理)

    iOS学习(OC语言)知识点整理 一.OC中的内存管理 1)概念:内存管理的对象为所有继承了NSObject的对象,对基本数据(如:int .float.double...)无效      OC中采用 ...

  9. iOS阶段学习第18天笔记(Plist-Archiver-归档与解归档操作)

    iOS学习(OC语言)知识点整理 一.归档与解归档的操作 1)归档是一个过程,将一个或多个对象存储起来,以便以后可以还原,包括将对象存入文件,以后再读取 将数据对象归档成plist文件 2)plist ...

随机推荐

  1. 一个用微软官方的OpenXml读写Excel 目前网上不太普及的方法。

    新版本的xlsx是使用新的存储格式,貌似是处理过的XML. 传统的excel处理方法,我真的感觉像屎.用Oldeb不方便,用com组件要实际调用excel打开关闭,很容易出现死. 对于OpenXML我 ...

  2. SWF READER 破解日志。

    网上传闻swf reader是破解最厉害的神器,可以内存抓取+doSWF反编译.所以去官网下了一个: SWF_Reader_2.3 不出所料,demo版本没有反编译的功能.网上搜到一个哥们尝试了下: ...

  3. Hibernate缓存(转)

    来自:http://www.cnblogs.com/wean/archive/2012/05/16/2502724.html 一.why(为什么要用Hibernate缓存?) Hibernate是一个 ...

  4. 腾讯Ubuntu云虚拟主机设置ftp服务器

    刚申请了免费的腾讯云主机, 发现还要想办法自己的服务器代码传到云主机上 在网上搜了很多方法介绍, 照着设置完后都无法正常连接 最后半夜尿醒来睡不着找到一篇站内文章, 提到必须注释掉一行代码 这个是其他 ...

  5. Atitit 项目培训与学校的一些思路总结

    Atitit 项目培训与学校的一些思路总结 1.1. Overview implet review  OIR学习大法1 1.2. "录取流程,对报名者唯一的要求是学习该项目所必须的先修知识和 ...

  6. vue.js学习之入门实例

    之前一直看过vue.js官网api,但是很少实践,这里抽出时间谢了个入门级的demo,记录下一些知识点,防止后续踩坑,牵扯到的的知识点:vue.vue-cli.vue-router.webpack等. ...

  7. jquery 插件开发

    一.$.extend()  这种方式用来定义一些辅助方法是比较方便的 $.extend({ sayHello:function(name){ console.log('Hello:'+name); } ...

  8. python开启简单webserver

    python开启简单webserver linux下面使用 python -m SimpleHTTPServer 8000 windows下面使用上面的命令会报错,Python.Exe: No Mod ...

  9. Oracle 11g系列:数据表对象

    Oracle数据库的下一层逻辑结构并非数据表,而是表空间.每个数据表都属于唯一的表空间. 1.Oracle表空间 与数据表相同,Oracle表空间是一个逻辑对象,而非物理对象,是数据库的组成部分.当使 ...

  10. 【WP8.1开发】认识后台任务

    在手机上,使用后台,不像电脑上那么随意,准确地讲嘛,在移动平台上,后台任务都有严格的限制.至于说为什么会有这么多限制,我估计初衷很明显——保证系统的性能不受某个或某几个应用的负面影响:另外就是出于安全 ...