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. IOS上架流程

    来个简易版本的.此版本针对用于初次上架的MAC以及在别的本上上架过,但是新换MAC但不换开发者帐号的MAC. 1:首先确认本机没有老旧的开发和distribution证书,有的话,删除: 2:在本机打 ...

  2. AngularJS快速入门指南19:示例代码

    本文给出的大部分示例都可以直接运行,通过点击运行按钮来查看结果,同时支持在线编辑代码. <div ng-app=""> <p>Name: <input ...

  3. IOS 多线程03-GCD

    如果在本文之前要了解一下线程的基本知识,请访问下面的网址:http://www.cnblogs.com/alunchen/p/5337608.html 1.简介 GCD不仅适用于Object-C,也适 ...

  4. 第三天 vi编辑器使用和软件安装

    [复习] 判断题: 查看某文件权限为rwxr-xr-- ,则其所属组权限为只读. 对一个目录有w权限,表示可以修改目录下文件内容. 3..tar.gz格式的压缩包可以使用tar -xjf解压缩 4.m ...

  5. python学习 函数

    # -*- config=utf-8 -*- #################################### 函数 ################################## de ...

  6. jquery 插件开发

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

  7. Leetcode 69 Sqrt(x) 二分查找(二分答案)

    可怕的同时考数值溢出和二分的酱油题之一,常在各种小公司的笔试中充当大题来给你好看... 题意很简单,在<二分查找综述>中有描述. 重点:使用简单粗暴的long long来避免溢出,二分均方 ...

  8. Java 线程 — ThreadLocal

    ThreadLocal 先来看看ThreadLocal的注释: This class provides** thread-local variables**. These variables diff ...

  9. TSql 分层和递归查询

    1,需求分析 在TSql中实现层次结构,例如有这样一种数据结构,省,市,县,乡,村,如何使用一张表表示这种数据结构,并且允许是不对称的,例如,上海市是个直辖市,没有省份. create table d ...

  10. 如何在 ETL 项目中统一管理上百个 SSIS 包的日志和包配置框架

    一直准备写这么一篇有关 SSIS 日志系统的文章,但是发现很难一次写的很完整.因为这篇文章的内容可扩展的性太强,每多扩展一部分就意味着需要更多代码,示例和理论支撑.因此,我选择我觉得比较通用的 LOG ...