IOS开发-OC学习-protocol(协议)
在OC语言中,协议是一组方法,里面有两种方法,一种是遵守这个协议的类的实例必须实现的方法,另一种是可以实现也可以不实现的方法。
例如我定义一个学生的协议,这个协议里有两个方法,其中一个是必选的方法;学生上学,另一个是可选方法,学生学习。只要是学生,不管大学生,中学生,小学生,只要遵守这个协议,都必须实现学生协议中的必选方法,也就是学生上学的方法。
协议中只声明方法,不需要实现方法。方法的实现在遵守这个协议的类的.m文件中实现。
以下是Student协议的定义:
#import <Foundation/Foundation.h> //协议所遵守的基协议是NSObject
@protocol Student <NSObject> //定义必选方法
@required
-(void)gotoschool; //定义可选方法
@optional
-(void)study; @end
以下是大学生类的.h文件
#import <Foundation/Foundation.h> //导入学生协议头文件
#import "Student.h" //声明大学生类,遵守的student协议用<>括起来
@interface academician : NSObject <Student> @end
以下是大学生类的.h文件:
#import "academician.h" @implementation academician //实现student协议中规定的必须实现的方法
-(void)gotoschool{
NSLog(@"大学生去上学");
} @end
以下是另一个遵守student协议的类:小学生类的.h文件:
#import <Foundation/Foundation.h>
#import "Student.h"
@interface pupil : NSObject <Student> @end
小学生类的.m文件:
#import "pupil.h"
@implementation pupil
-(void)gotoschool{
NSLog(@"小学生去上学");
}
@end
以下是主函数:
#import <Foundation/Foundation.h>
//包含大学生类头文件
#import "academician.h"
//包含小学生类头文件
#import "pupil.h" int main(int argc, const char * argv[]) { // 实例化一个大学生对象
academician *daxuesheng = [[academician alloc]init];
// 大学生对象遵守student协议中的gotoschool方法
[daxuesheng gotoschool]; // 实例化一个小学生对象
pupil *xiaoxuesheng = [[pupil alloc]init];
// 小学生对象遵守student协议中的gotoschool方法
[xiaoxuesheng gotoschool]; return ;
}
注意:在以上例程中,student协议中的可选方法study没有被实现,这是可以的,但是必选方法gotoschool一定要被实现。
IOS开发-OC学习-protocol(协议)的更多相关文章
- iOS开发OC基础:Xcode中常见英文总结,OC常见英文错误
在开发的过程中难免会遇到很多的错误,可是当看到系统给出的英文时,又不知道是什么意思.所以这篇文章总结了Xcode中常见的一些英文单词及词组,可以帮助初学的人快速了解给出的提示.多练习,就肯定能基本掌握 ...
- iOS开发网络篇—HTTP协议
iOS开发网络篇—HTTP协议 说明:apache tomcat服务器必须占用8080端口 一.URL 1.基本介绍 URL的全称是Uniform Resource Locator(统一资源定位符) ...
- 02.iOS开发网络篇—HTTP协议
iOS开发网络篇—HTTP协议 说明:apache tomcat服务器必须占用8080端口 一.URL 1.基本介绍 URL的全称是Uniform Resource Locator(统一资源定位符) ...
- iOS开发-OC语言 (一)oc数据类型
分享一套以前学习iOS开发时学习整理的资料,后面整套持续更新: oc数据类型 数据类型:基本数据类型.指针数据类型 基本数据类型:数值型.字符型(char).布尔型.空类型(void) 指针数据类型: ...
- 关于iOS开发的学习
关于iOS开发的学习,打个比方就像把汽车分解: 最底层的原料有塑料,钢铁 再用这些底层的东西造出来发动机,座椅 最后再加上写螺丝,胶水等,把汽车就拼起来了 iOS基本都是英文的资料, ...
- iOS开发如何学习前端(2)
iOS开发如何学习前端(2) 上一篇成果如下. 实现的效果如下. 实现了一个横放的<ul>,也既iOS中的UITableView. 实现了当鼠标移动到列表中的某一个<li>,也 ...
- iOS开发如何学习前端(1)
iOS开发如何学习前端(1) 我为何学前端?因为无聊. 概念 前端大概三大块. HTML CSS JavaScript 基本上每个概念在iOS中都有对应的.HTML请想象成只能拉Autolayout或 ...
- iOS开发人员程序许可协议
请细致阅读以下的许可协议条款和条件之前下载或使用苹果软件. 这些条款和条件构成你和苹果之间的法律协议. iOS开发人员程序许可协议 目的 你想使用苹果软件(例如以下定义)来开发一个或多个应 ...
- iOS开发——OC基础-ARC、BLOCK、协议
一.ARC ARC 是一种编译器特性!而不是IOS运行时特性,和JAVA中得垃圾回收机制完全不一样ARC是自iOS 5之后增加的新特性,完全消除了手动管理内存的烦琐,编译器会自动在适当的地方插入适当的 ...
- iOS开发——OC篇&OC高级语法
iOS开发高级语法之分类,拓展,协议,代码块详解 一:分类 什么是分类Category? 分类就是类的补充和扩展部分 补充和扩展的每个部分就是分类 分类本质上是类的一部分 分类的定义 分类也是以代码的 ...
随机推荐
- 转:Web安全与Rational AppScan入门
Web 应用的基础概念 在讨论 Web 应用安全之前,先简单介绍一下 Web 应用基础概念,这样便于理解为什么 Web 应用是脆弱的,容易受到攻击. 1. 什么是 Web 应用 Web 应用是由动态脚 ...
- System services not available to Activities before onCreate()
应用中涉及到系统的mac地址获取,应该是不能够在oncreate()以前使用
- U3D脚本开发基础
1.MonoBehaviour类,定义了对各种特定事件的脚本响应函数.这些函数均以On做开头. 2.U3D中常用的组件及对应变量名如下: Transform(transform),Rigidbody( ...
- java设计原则:16种原则
一 类的设计原则 1 依赖倒置原则-Dependency Inversion Principle (DIP) 2 里氏替换原则-Liskov Substitution Principle (L ...
- O(n)线性时间找第K大,中位数
运用快速排序的思想,可以达到线性时间找到一串数的第K大 #include<cstdio> #define F(i,a,b) for(int i=a;i<=b;i++) ],n; vo ...
- Android Camera Api的心得
(一) 前言最近看Camera的api,觉得写的真的不错.现在翻译过来,给大家分享分享,译文可能不太好,大家将就着看哈. (二) 正文1. CameraCamera是Android framework ...
- java网络之tcp
简单tcp传输 package pack; /* 演示tcp传输. 1,tcp分客户端和服务端. 2,客户端对应的对象是Socket. 服务端对应的对象是ServerSocket. 客户端, 通过查阅 ...
- zf-监察系统的左侧菜单树的表
Sys_Right 这个表
- 我的android学习脚步----------- 的第一个应用
刚刚开始学android开发,以前都是在别人调好的应用中修改JNI,现在需要自己一步步走 开发环境:Eclipse+ADT 配置不多讲了,引自:http://www.cnblogs.com/allen ...
- HaiHongOJ 1003 God Wang
题目连接:http://oj.haihongblog.com/problem.php?id=1003 线段树维护区间最小值,并且求解下标 #include <stdio.h> #inclu ...