Objective-C:在类中设置不同协议
在下面的代码中,设置了两种不同的协议规则:一种是老师对学生设置的协议:即老师发出命令后,学生站起来、回答问题、坐下; 另一种是我对学生设置的协议:即学生按照我的协议中的初始化函数去初始化一个整数。
//我设置的协议Myprotocol,里面有我设置的协议规则(属性、函数)作为一个单独的文件
// Myprotocol.h
// 协议
//
// Created by ma c on 15/8/12.
// Copyright (c) 2015年. All rights reserved.
// #import <Foundation/Foundation.h> @protocol Myprotocol
@property(nonatomic,assign)NSInteger integer;
-(id)initWithInteger:(NSInteger) i;
-(void) show2;
-(void)print;
-(void) initialize;
@end
//老师设置的协议和类本身的属性 .h和.m文件;在类里面直接设置协议,没有作为单独的文件
// Teacher.h
// 协议
//
// Created by ma c on 15/8/12.
// Copyright (c) 2015年. All rights reserved.
// #import <Foundation/Foundation.h>
@protocol TeacherDelegate//老师制定协议规则
@required //在协议代理人类中必须要全部实现的方法
-(void) show1;
-(void) Standup;
-(void) Answerquestion;
@optional //协议代理人类中可以选择性的实现(可以实现,也可以不用实现)
-(void) Setdown;
@end @interface Teacher : NSObject
@property(nonatomic,weak) id<TeacherDelegate> delegate;
-(void)ordering;
@end
// Teacher.m
// 协议
//
// Created by ma c on 15/8/12.
// Copyright (c) 2015年. All rights reserved.
// #import "Teacher.h" @implementation Teacher
@synthesize delegate;
-(void)ordering
{
[delegate show1];
NSLog(@"teacher is ordering!");
[self.delegate Standup];
[self.delegate Answerquestion];
[self.delegate Setdown];
}
@end
//学生类Student 它作为实现这两种协议的代理人(委托者).h和.m文件
// Student.h
// 协议
//
// Created by ma c on 15/8/12.
// Copyright (c) 2015年. All rights reserved.
// #import "Teacher.h"
#import "TeacherDelegate.h"
#import "Myprotocol.h"
@interface Student : Teacher<TeacherDelegate,Myprotocol>
@end
// Student.m
// 协议
//
// Created by ma c on 15/8/12.
// Copyright (c) 2015年. All rights reserved.
// #import "Student.h" @implementation Student
@synthesize integer;
//TeacherDelegate
-(void) show1
{
NSLog(@"the teacher's protocol is running!");
}
-(void) Standup
{
NSLog(@"student stand up.");
}
-(void) Answerquestion
{
NSLog(@"student answer question.");
}
-(void) Setdown
{
NSLog(@"student set down!");
}
//Myprotocol
-(void) show2
{
NSLog(@"the my protocol is running!");
}
-(id)initWithInteger:(NSInteger) i
{
self = [super init];
if(self)
{
self.integer = i;
}
return self;
}
-(void)print
{
NSLog(@"integer=%ld",self.integer);
}
-(void) initialize
{
NSLog(@"Integer's initialization succeed.");
}
@end
//主函数测试这两种协议的实现
// main.m
// 协议
//
// Created by ma c on 15/8/12.
// Copyright (c) 2015年. All rights reserved.
// #import <Foundation/Foundation.h>
#import "Teacher.h"
#import "Student.h"
#import "Myprotocol.h"
int main(int argc, const char * argv[])
{
@autoreleasepool
{
Teacher *teacher = [[Teacher alloc]init]; //老师设置学生代理实现老师设置的协议(TeacherDelegate)
Student *student = [[Student alloc]init];
[teacher setDelegate:student];
[teacher ordering];
printf("\n"); //我设置学生代理实现我设置的协议(Myprotocol)
Student *stu = [[Student alloc]initWithInteger:];
[stu show2];
[stu print];
[stu initialize];
}
return ;
}
//运行结果
-- ::51.498 协议[:] the teacher's protocol is running!
-- ::51.499 协议[:] teacher is ordering!
-- ::51.499 协议[:] student stand up.
-- ::51.500 协议[:] student answer question.
-- ::51.500 协议[:] student set down! -- ::51.500 协议[:] the my protocol is running!
-- ::51.500 协议[:] integer=
-- ::51.500 协议[:] Integer's initialization succeed.
Program ended with exit code:
Objective-C:在类中设置不同协议的更多相关文章
- 在client类中设置访问属性 address,business和individua
php 5.4中的traits,是新引入的特性,中文还真不知道如何准确翻译好.其实际的目的, 是为了有的场合想用多继承,但PHP又没多继承 ,于是就发明了这样的一个东西. Traits可以理解为一组能 ...
- php 类中设置成员属性方法
class FileUpload { private $path = "./uploads"; //上传文件保存的路径 private $allowtype = array('jp ...
- springmvc+hibernate在实体类中设置外键
1.表User id主键,username,password,dept... 表Attendence id主键,uid外键,time... @ManyToOne @JoinColumn(name = ...
- iOS 如何在自定义类中支持 "[]" 运算符
在相应类中实现如下协议即可. 1.字典类 - (id)objectForKeyedSubscript:(NSObject <NSCopying> *)key; - (void)setObj ...
- ASP.NET MVC中设置跨域
ASP.NET MVC中设置跨域 1.什么是跨域请求 js禁止向不是当前域名的网站发起一次ajax请求,即使成功respone了数据,但是你的js仍然会报错.这是JS的同源策略限制,JS控制的并不是我 ...
- 自定义类属性设置及setter、getter方法的内部实现
属性是可以说是面向对象语言中封装的一个体现,在自定义类中设置属性就相当于定义了一个私有变量.设置器(setter方法)以及访问器(getter方法),其中无论是变量的定义,方法的声明和实现都是系统自动 ...
- js基础 js自执行函数、调用递归函数、圆括号运算符、函数声明的提升 js 布尔值 ASP.NET MVC中设置跨域
js基础 目录 javascript基础 ESMAScript数据类型 DOM JS常用方法 回到顶部 javascript基础 常说的js包括三个部分:dom(文档document).bom(浏览器 ...
- C++ 理解类 和 类中的public、protected、private
我们要明确,不只是C++有类,很多语言也会用到类,因为现在很多都是面向对象编程... 在c++中,关于类的理解,个人理解是这样的,具有共同属性的一个集合被称为类, 比如说人这个集合,具有性别,年龄,出 ...
- 【IOS 开发】Objective - C 面向对象高级特性 - 包装类 | 类处理 | 类别 | 扩展 | 协议 | 委托 | 异常处理 | 反射
一. Objective-C 对象简单处理 1. 包装类 (1) 包装类简介 NSValue 和 NSNumber : -- 通用包装类 NSValue : NSValue 包装单个 short, i ...
随机推荐
- Git github webhook 自动更新/部署代码 php自动更新脚本
这几天尝试了利用github的webhook,当代码更新到github,我们的测试服务器自动更新最新的gitbub仓库代码. 先列几个大概步骤,有时间再补充详细 1 . 服务器生成ssh key,一般 ...
- 20169211《Linux内核原理与分析》 第九周作业
一.Linux内核虚拟文件系统学习总结 Linux支持各种文件系统,Linux内核通过虚拟文件系统了对各种文件系统共性的进行抽象,并对外提供统一接口,从面向对象编程的角度来看,称为抽象文件系统更为合适 ...
- vue 单向数据流 & 双向绑定
在react中是单向数据绑定,而在vue中的特色是双向数据绑定.但是其实就我个人的理解是: 其实无论是vue还是react其实还是提倡单向数据流去管理状态,这一点在vuex和redux状态管理器上体现 ...
- 集群运维ansible
ssh免密登录 集群运维 生成秘钥,一路enter cd ~/.ssh/ ssh-keygen -t rsa 讲id_rsa.pub文件追加到授权的key文件中 cat ~/.ssh/id_rsa.p ...
- 解决mongo 端口占用问题
在打开mongod之后如果不用了就按ctrl + c ,就不会出现以下的问题了 执行mongod报错 mongod 2016-08-03T14:31:15.691+0800 I CONTROL [in ...
- Reading lists for new LISA students(转)
Research in General How to write a great research paper Basics of machine learning http://www.iro.um ...
- zip函数实际应用
一个需求,把两个列表要同时用for循环贴到模板上,用zip在后端组成 元祖组成的列表 这样在模板就可以用.0 .1的方式,类似python中 x[0] x[1] 显示出来. html显示: ...
- BZOJ 1212 [HNOI2004]L语言 【AC自动机 + 背包】
题目链接[http://www.lydsy.com/JudgeOnline/problem.php?id=1212] 题意:给你一些单词,然后给出一个没有标点的文本串S,都是小写字符.现在让你求用给出 ...
- Easy File Sharing Web Server 6.9远程溢出漏洞
from struct import pack import socket,sys import os host="192.168.109.129" port=80 junk0 = ...
- Codeforces Round #294 (Div. 2)C - A and B and Team Training 水题
C. A and B and Team Training time limit per test 1 second memory limit per test 256 megabytes input ...