A.概念

1.用来声明方法(不能声明成员变量)
2.只要某个类遵守了这个协议,相当于拥有了协议中得所有方法的声明
3.属性
(1)@required:默认,要求实现,不实现就会发出警告
(2)@optional:不要求实现
————MyProtocol.h--------------
 @protocol MyProtocol
@required
- (void) test1; @optional
- (void) test2; - (void) test3; @end
 
4.父类遵循的协议,子类也会继承
 
5.基协议
(1)一个协议遵守了另外一个协议,就可以拥有其所有声明的方法
————MyProtocol.h———————
 #import <Foundation/Foundation.h>
#import "MyProtocol.h" @protocol MyProtocol2 <MyProtocol> @end
 
(2)基协议<NSObject>
a..建议所有协议都遵循基协议
@protocol MyProtocol <NSObject>
 
b.动态遵守协议
    Person<MyProtocol2> *p = [[Person alloc] init];
 
c.遵守多个协议
@interface Person : NSObject <MyProtocol, MyProtocol2>
 
 
6.协议和成员对象
===========Person.h====================
 @interface Person : NSObject <MyProtocol]] >

 @property(nonatomic, strong) id<MyProtocol2> obj;

 @end
 
===========main.c======================
 int main(int argc, const char * argv[]) {
Person *p = [[Person alloc] init];
Dog *d = [[Dog alloc] init]; p.obj = d; // 警告,Dog没有遵守MyProtocol2协议 return ;
}
 
7.@protocol
在.h可以先使用@protocol声明协议,在.m中再#import进来protocol的.h文件
==========Person.h=====================
 #import <Foundation/Foundation.h>

 @protocol MyProtocol;
@protocol MyProtocol2; @interface Person : NSObject <MyProtocol]] > @property(nonatomic, strong) id<MyProtocol2> obj; @end
 
==========Person.m=====================
 #import "Person.h"
#import "MyProtocol.h"
#import "MyProtocol2.h" @implementation Person
- (void)test1
{ } - (void)test3
{ } @end
 
 

[Objective-c 基础 - 3.4] protocol的更多相关文章

  1. Objective中的协议(Protocol)

    Objective中的协议(Protocol) 作用: 专门用来声明一大堆方法. (不能声明属性,也不能实现方法,只能用来写方法的声明). 只要某个类遵守了这个协议.就相当于拥有这个协议中的所有的方法 ...

  2. ISO 基础之 (十三) protocol 协议

    一 简绍 protocol,简单来说就是一系列不属于任何类的方法列表,其中声明的方法可以被任何类实现.这种模式一般称为代理(delegation)模式.通过Protocol定义各种行为,在不同的场景采 ...

  3. Objective-C /iphone开发基础:协议(protocol)

    protocol协议时为了补充Objective-C 只能单继承的缺陷而增加的一个新功能.Objective-C重所有的方法都是虚方法,所以在oc重也就没有关键字 virtual一说,有了协议可以补充 ...

  4. [置顶] Objective-C ,/,ios,/iphone开发基础:协议(protocol)

    protocol协议时为了补充Objective-C 只能单继承的缺陷而增加的一个新功能.Objective-C重所有的方法都是虚方法,所以在oc重也就没有关键字 virtual一说,有了协议可以补充 ...

  5. Objective—C基础学习总结

        1. (1)面向过程:一种以事件为中心的编程思想         (2)面向对象:一种以对象为中心的编程思想        2.get和set是用来访问和修改对象里的属性值           ...

  6. Objective C 基础

    1,字符串加@: 不加@的是C语言字符串. 加@的代表的是OC的NSString http://www.jikexueyuan.com/course/71_2.html 2,setValuesForK ...

  7. Python中reactor,factory,protocol

    最为简单的情况下,除了了解清reactor的简单使用,你还要了解Protocol和Factory.它们最终都会由reactor的侦听建立和run来统一调度起来. 建立服务器的第一个要解决的问题就是服务 ...

  8. 客户端服务端通信protocol

    这个协议不知我在上面耗费了多长时间,也有人问过我咋回事,这个protocol不长,但对于我来说理解起来很费劲,今天回来看看忽然看懂了(80%),只能说不知看了多少遍 其实这些东西应该在来的一个月这样子 ...

  9. [置顶] IOS 基础入门教程

    IOS 基础入门教程 教程列表: IOS 简介 IOS环境搭建 Objective C 基础知识 创建第一款iPhone应用程序 IOS操作(action)和输出口(Outlet) iOS - 委托( ...

随机推荐

  1. Ubuntu 12.04安装字体

    http://www.2cto.com/os/201210/160645.html 安装方法,终端输入:  $ sudo thunar /usr/share/fonts/truetype  待ture ...

  2. 在安装ISE的情况下,充分利用ISE的安装目录,查找资料

    2013-06-22 11:03:02 在找资料时,通过官网输入关键字的方法找资料,有事会给出很多版本的链接.或者找不到,下面给出一种简便的方法,可以快速找到想要的资料. 如果要找ISE各个工具如pl ...

  3. Hibernate个人总结

    编写Hibernate第一个程序 Hibernate是目前最流行的持久层框架,专注于数据库操作.使用Hibernate框架能够使开发人员从繁琐的SQL语句和复杂的JDBC中解脱出来.Hibernate ...

  4. EXCEL VB

    全面控制 Excel首先创建 Excel 对象,使用ComObj:Dim ExcelID as Excel.ApplicationSet ExcelID as new Excel.Applicatio ...

  5. BZOJ3155: Preprefix sum

    题解: 写过树状数组搞区间修改和区间求和的就可以秒出吧... 代码: #include<cstdio> #include<cstdlib> #include<cmath& ...

  6. oracle必须启动的服务

    按照windows 7 64位 安装oracle 11g R2中的方法成功安装Oracle 11g后,共有7个服务,这七个服务的含义分别为: 1. Oracle ORCL VSS Writer Ser ...

  7. angular bootstrap

    2个js冲突,点击2次才显示,去掉data-toggle="dropdown"

  8. easyui资源

    官网地址:http://www.jeasyui.com/index.php(相关文档示例,有demo, tutorial, documentation) 未混淆的源码:http://jquery-ea ...

  9. Windows安装weblogic

    WebLogic安装结束 以下是进入MyEclipse启动配置WebLogic

  10. iOS开发之UITextField

    UITextField基本知识 UITextField展示的是一些可编辑的内容,并且与用户有一些交互.比如当你在虚拟键盘上按下return键时,一般会关联到键盘隐藏事件上.UITextField的一些 ...