黑马程序员——有关protocol的小结

在OC程序中经常会有这样的问题就是一个类想让其他类帮自己实现某些方法,然后再将结果返回给这个类;如何让一个类要找的代理去实现自己想要的方法呢?

这样就需要有一个协议,让能遵守协议的其他类都能实现协议中的方法声明,成为该类的代理。

protocol的使用原则

1.可以用来声明很多方法,但是不能声明成员变量。

2.只要一个类遵守了这个协议,就相当于拥有了这个协议中所有的方法声明,然后在自己的.m文件中实现就行了。

3.只要父类遵守了这个协议,就相当于子类也遵守了这个协议。

protocol的使用方法:

一、协议的定义

@protocol  协议名<NSObject>

//方法声明

@end

二、如何遵守协议

1.类遵守协议

@interface  类名:父类名<协议1,协议2,……>

@end

2.协议遵守协议

@protocol 协议名 <协议1,协议2,……>

@end

三、协议中方法声明的关键字

[email protected](默认),这个是默认要求去实现的,不实现会有警告。

[email protected]这个是可以先实现也可以选择不实现。

一般情况下这两个关键字是用于程序员之间的交流,声明哪些方法可以不实现哪些方法要去实现。

四、在定义一个变量时,可以限制这个变量保存的对象遵守某个协议

类名<协议名>*变量名;       如Person<protocol1>*p=[[Person alloc]init];   要求p保存的对象Person必须遵守protocol1协议。

id<协议名>变量名;            如id<protocol1>obj;

五、@property中声明的属性也可以做一个遵守协议的限制。

@property (nonatomic ,strong) 类名<协议名>变量名;         如@property (nonatomic,strong) Person<protocol1>*p1;

六、协议不仅可以定义在单独的.h文件中也可以定义在一个类的声明中。

即若协议内容公用就要定义在单独的.h文件中方便使用。

七、协议的提前声明

和类的提前声明“@class 类名”的方式类似,协议的提前声明可以用“@protocol 协议名”的方式进行提前声明,些声明只是纯粹性的声明,若需要协议中的方法还需要用

#import "协议头文件"方式获取其中的方法声明。

如:@protocol Myprotocol;          #import "Myprotocol.h"

关于protocol 理论知道我只学了这么多,日后的学习中再进行补充吧。

http://www.itheima.com/

时间: 2024-08-10 16:08:06

黑马程序员——有关protocol的小结的相关文章

黑马程序员_java String类小结

------- android培训.java培训.期待与您交流! ---------- String类字符串是一个特殊的对象,字符串是常量一旦初始化就不会被改变,只能是新建字符串对象.字符串常量池是在方法区中开辟的.==与equals()的区别,前者判断的是引用类类型变量即地址,后者判断的是对象地址中的内容.不同对象地址中的内容值是可以相等的.String类复写了Object类中的equals方法,该方法用于判断字符串对象中的字符串内容是否相同.String s2=new String("abc

黑马程序员___多线程小结

----------- android培训.java培训.java学习型技术博客.期待与您交流! --------- 进程和线程 进程是正在进行中的程序,指一个内存中运行的应用程序,每个进程都有自己独立的一块内存空间,一个进程中可以有多个线程. Java程序的进程里有几个线程:主线程, 垃圾回收线程(后台线程) 线程是指进程中的一个执行任务(控制单元),一个进程中可以运行多个线程,多个线程可共享数据.多线程:在同一个进程中同时运行的多个任务;一个进程至少有一个线程,为了提高效率,可以在一个进程中

黑马程序员学习笔记-C指针小结

黑马程序员学习笔记-C指针 1. 指针简介: 指针是C语言中非常重要的数据类型,是C语言的精华 2. 指针变量定义: 格式:类名标识符 *指针变量名; 指针变量只能存储地址 指针就一个作用:能够根据一个地址值,访问对应的存储空间 指针变量p前面的int:指针变量只能指向int类型的数据 3.实例: 4. 注意点: 指针变量只能存储地址.指针变量未经初始化,不要拿来间接访问其他存储空间.指针变量的初始化可以int *p = &a;也可以拆分成两句:int *p; p =&a;.定义变量时的*

黑马程序员——打印流小结

//打印流 /* 1.字节打印流,他可以获取的参数有: 1.File对象 2.字符串 3.字节输出流,可以实现自动刷新 2.字符打印流,他可以获取的参数有: 1.File对象 2.字符串 3.字节输出流,可以实现自动刷新 4.字符输出流,可以实现自动刷新 */ import java.io.*; import java.io.PrintWriter; import java.io.BufferedReader; public class Print{ public static void mai

黑马程序员——网络编程篇

------- android培训.java培训.期待与您交流! ---------- 概述   1.网络模型        (1).OSI参考模型        (2).TCP/IP参考模型   2.网络通讯要素         (1).IP地址        (2).端口号         (3).传输协议    3.过程        1,找到对方IP. 2,数据要发送到对方指定的应用程序上.为了标识这些应用程序,所以给这些网络应用程序都用数字进行标识. 为了方便称呼这个数据,叫做端口(逻

黑马程序员_ 利用oc的协议实现代理模式

先说下代理模式是什么吧 定义: 为其他对象提供一种代理以控制对这个对象的访问.在某些情况下,一个对象不适合或者不能直接引用另一个对象 而代理对象可以在客户端和目标对象之间起到中介的作用. 在看过李明杰老师的课程后,我对代理模式有了最初步的理解,虽然还很浅显 但是也明白了代理模式的 一些作用跟用法.首先使用代理模式可以降低耦合度.大大的增强了代码的弹性. 举个例子,小明想看电影,但是没时间买票 于是就拜托小强去买票 最简单的方式就是 建立一个person类(小明) 一个agent类(代理类) ag

【黑马程序员】————简单的OC程序

一.  OC简介 C语言的基础上,增加了一层最小的面向对象语法 完全兼容C语言 可以在OC代码中混入C语言代码,甚至是C++代码 可以使用OC开发Mac OS X平台和iOS平台的应用程序 二.  OC语法预览 1.      关键字 基本上所有关键字都是以@开头 下面列举一些常见的关键字,看一眼就行了,不用去翻资料查找它们的含义 @interface.@implementation.@end @public.@protected.@private.@selector @try.@catch.@

黑马程序员_Java网络编程

1,IP地址和InetAddress IP地址是互联网上每台计算机都有的自己的标记,IP地址分为5类,A类保留给政府,B类给中等规模的公司,C类给任何需要的人,D类用于组播,E类用于实验. A类  1.0.0.1-126.255.255.254  B类  128.0.0.1-191.255.255.254   C类  192.0.0.1-223.255.255.254  D类 244.0.0.1-239.255.255.254 E类 240.0.0.1-255.255.255.254 在以后开发

黑马程序员_浅谈out参数、ref参数和可变参数

1.out参数 out关键字会导致参数通过引用来传递,通俗点说,就是往外传值的. out参数的作用:用于以内部变量为外部变量赋值的,out一般适用于某个方法不只是使用return返回单个值,而是需要有多个返回值的情况. out参数的使用需要注意以下几点:  1)out参数传递的变量在传递之前不需要对其进行初始化. 分析:在调用方法之前,对out参数传递的变量只需声明,可以赋值也可以不赋值,不过反正都是要在调用时被覆盖掉,所以大可不必赋值,因为赋值了虽然不会报错,但却根本也没有用处,没必要多此一举