1、协议:是一组声明方法的集合,不能声明成员变量,作用类似于接口。
          遵守此协议的类就相当于拥有了这个协议的所有方法的声明,如果父类遵守了某个协议,子类也遵守了这个协议。
          遵守这个协议的类可以实现协议中的方法。
关键字:
@required:声明必须遵守的方法
@optional:声明可选的方法
 
2、代理:实现协议的某个方法
3、委托:指定要实现协议方法的对象(代理),代理来实现对应的方法
总结:
委托方:1、定义协议;2、引用代理;3、发送消息
代理方:1、遵守协议;2、实现方法;3、设置自己为代理方
在委托方发送消息:比较可靠的方式
//判断是否有代理方和代理方是否实现了方法
if (self.delegate && [self.delegate respondsToSelector:@selector(popoverListView:dd)])
{
    [self.delegate popoverListView:dd];
}
 
 
补充:(昨天晚上,我遇到一个问题,一直没有解决,于是找自己的笔记,发现自己的笔记,很不全面,很多漏点;看到自己的笔记做成这样,我感到很气愤。回去的时候,我就想,自己一定要把这笔记做详细,不管多简单的,都要做一个完整的记录、注释,不要偷懒!)
时间:2015年07月07日
//—————————————————---------------------委托方--------------------------------------------------
//  BViewController.h
//  星座运程App

#import <UIKit/UIKit.h>

 
@class BViewController;//声明BViewController是一个类,因为在协议中要使用它,但它的定义还在协议的下面,因此就要预声明
//1、定义协议
@protocol BViewControllerDelegate <NSObject>//继承NSObject就可以了
//第一个参数一定是委托方,这样就好区分这个委托是谁的,并且可能还要用到它,这里是BViewController这个类
- (void)returnStarInfo:(BViewController *)Bviewc andMssage:(NSString *)msg andTitle:(NSString *)title;
 
@end
 
@interface BViewController : UIViewController
//2、引用代理
@property(nonatomic,weak)id<BViewControllerDelegate>delegate;
@property(nonatomic,strong)NSDictionary *starDic;
@end
 
//3、发送消息
//  BViewController.m
//  星座运程App
#import "BViewController.h"
//3、在一个适当的时机,发送消息
- (IBAction)returnStarInfo:(UIButton *)sender {
    UIButton *bt=[[UIButton alloc]init];
    bt=sender;
    NSString *str=[self.starDic objectForKey:bt.titleLabel.text];
//当发生了点击绑定动作的按钮时,发送消息
    [self.delegate returnStarInfo:self andMssage:str andTitle:bt.titleLabel.text];
    [self.navigationController popViewControllerAnimated:YES];
}
//————————————————————--------------------------------代理方--------------------------------------------
//  AViewController.m
//  星座运程App
#import "AViewController.h"
#import “BViewController.h”//协议就存在这个文件中中
//1、遵守协议
@interface AViewController ()<BViewControllerDelegate>//协议就存在这个文件中:BViewController.h
 
@end
//2、设置代理
- (IBAction)selectStar:(UIButton *)sender {
    BViewController *bvc=[[BViewController alloc]initWithNibName:@"BViewController" bundle:nil];
    bvc.delegate=self;//设置自己为代理方
    [self.navigationController pushViewController:bvc animated:YES];
}
//实现方法
-(void)returnStarInfo:(BViewController *)Bviewc andMssage:(NSString *)msg andTitle:(NSString *)title{
    self.starInfo.text=msg;
    self.title=[title stringByAppendingString:@" --- 12星座"];
}
//-------------------------------------------------------------------------------------------------------
 

协议Protocol的更多相关文章

  1. iOS阶段学习第19天笔记(协议-Protocol)

    iOS学习(OC语言)知识点整理 一.关于协议(Protocol)的介绍 1)概念:协议指多个对象之间协商的一个接口对象,协议提供了一些方法用在协议的实现者和代理者      之间通讯的一种方式 2) ...

  2. OC基础--分类(category) 和 协议(protocol)

    OC 中的category分类文件相当于 C#中的部分类:OC 中的protocol协议文件(本质是头文件)相当于 C#中的接口.今天就简单说明一下OC中的这两个文件. 由于视频中的Xcode版本低, ...

  3. 浅谈iOS开发的协议(protocol)和代理(delegate)

    协议和代理对于一个新手来说确实不讨好理解,也有很多的iOS开发的老手对此是懂非懂的.网上的很多博文只是讲了怎么使用,并没有说的很明白.下面我谈一下我的理解. 1.你要先搞明白,协议和代理为什么会出现, ...

  4. 关于ios object-c 类别-分类 category 的静态方法与私有变量,协议 protocol

    关于ios object-c 类别-分类 category 的静态方法与私有变量,协议 protocol 2014-02-18 19:57 315人阅读 评论(0) 收藏 举报 1.category, ...

  5. Objective-C中的协议(Protocol)和类别(Category)

    1.什么是协议? 2.协议与类别的声明和使用 1.什么是协议? 在Objective-C中,不支持多继承,即不允许一个类有多个父类,但是OC提供了类似的实现方法,也就是协议.协议有点类似于Java里的 ...

  6. Objective-C 中的协议(@protocol)和接口(@interface)的区别

    Objective-C 中的协议(@protocol),依照我的理解,就是C#, Java, Pascal等语言中的接口(Interface).协议本身不实现任何方法,只是声明方法,使用协议的类必须实 ...

  7. Objective-C:继承、分类(Category、extension)、协议(protocol),个人理解,仅供参考

    总结:继承.分类(Category.extension).协议(protocol)   一.继承: (1)特点: 继承多用于一般父类中的方法功能比较齐全,子类从父类继承过来使用,可以省略很多重复的代码 ...

  8. Objective-C:协议protocol

    六.协议(protocol) 关键字:@optional.@required (1)是一个类共享的一个方法列表 (2)它声明了一系列的方法而不进行实现 (3)遵从某个协议,就是需要实现协议中的方法 ( ...

  9. 协议(Protocol)与委托代理(Delegate)

    协议(Protocol)的作用: 1. 规范接口,用来定义一套公用的接口: 2. 约束或筛选对象. 代理(Delegate): 它本身是一种设计模式,委托一个对象<遵守协议>去做某件事情, ...

随机推荐

  1. 关于OpenCV做图像处理内存释放的一些问题

    转载:http://blog.sina.com.cn/s/blog_67a7426a0101czyr.html 工程运行,发现内存持续增长,到一定的时候就发生了内存泄漏. 内存泄露的定义 内存泄露是说 ...

  2. HTTP响应报文与工作原理详解

    超文本传输协议(Hypertext Transfer Protocol,简称HTTP)是应用层协议.HTTP 是一种请求/响应式的协议,即一个客户端与服务器建立连接后,向服务器发送一个请求;服务器接到 ...

  3. HTML5每日一练之input新增加的六种时间类型应用

    今天介绍一下input在HTML5中新增加的时间类型的应用,与昨天的练习一样,如果在以下这几种输入框中输入的格式不正确,也是无法提交的. 注意:此种类型的input在Opera10+中效果为佳,Chr ...

  4. DevExpress.XtraGrid的使用(部分)

    (三) XtraGrid的功能与GridView的功能相似,使用方法也类似,不过他的功能更加令人惊讶,看看下面的效果 Code//生成此效果的解决方案: // 1.从数据库去出两张表, //后台 Sq ...

  5. hadoop2.1.0编译安装教程

    由于现在hadoop2.0还处于beta版本,在apache官方网站上发布的beta版本中只有编译好的32bit可用,如果你直接下载安装在64bit的linux系统的机器上,运行会报一个INFO ut ...

  6. assert函数(python)

    assert语句: 用以检查某一条件是否为True,若该条件为False则会给出一个AssertionError. 用法: assert type(x)=int and x>=0 如果不满足后面 ...

  7. [0.0]Analysis of Baidu search engine

    Rencently, my two teammates and I is doing a project, a simplified Chinese search engine for childre ...

  8. 在Android项目中使用AndroidAnnotations(配置框架,显示Hello World!)

    使用这个框架可以极大的简化在开发Android过程中的代码.提高开发的效率.这里简单说一下配置方式.和使用办法. 项目的地址为:AndroidAnnotations Jar包下载地址:3.0.1 下载 ...

  9. 让EditText不能自动获取焦点

    在activity中放置了1个或1个以上的EditText,进入该activity的时候第一个EditText会接收焦点,我希望里面所有的EditText默认是不接收焦点的,该怎么做呢? 方法: 在第 ...

  10. 单例模式总结(Java版)

    1:懒汉的设计模式,在第一次调用的时候才完成相关的初始化操作 懒汉式是典型的时间换空间,就是每次获取实例都会进行判断,看是否需要创建实例,浪费判断的时间.当然,如果一直没有人使用的话,那就不会创建实例 ...