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 ...
随机推荐
- linux保证程序单实例运行
static int proc_detect(const char *procname){ char filename[100] = {0}; sprintf(filename, "%s/% ...
- Python学习之字符串格式化
Table 3.1. 字符串格式化代码 格式 描述 %% 百分号标记% %c 字符及其ASCII码 %s 字符串 %d 有符号整数(十进制) %u 无符号整数(十进制) %o 无符号整数(八进制) % ...
- customPage.class.php可添加js事件的分页类
用于ajax动态加载数据的分页类,分页事件可以动态添加,去除了a链接中的href地址. 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 ...
- 分布式系统的一致性算法------《Designing Data-Intensive Applications》读书笔记13
一致性算法是分布式系统中最重要的问题之一.表面上看,这似乎很简单,只是让几个节点在某些方面达成一致.在本篇之中,会带大家完整的梳理分布式系统之中的共识算法,来更加深刻的理解分布式系统的设计. 1.原子 ...
- 错误:SSL peer shut down incorrectly
韩梦飞沙 韩亚飞 313134555@qq.com yue31313 han_meng_fei_sha 打开这个界面 ,修改一下.对照自己以前的没问题的项目.我的是3.3. 错误:Failed ...
- android httpUrlConnection HttpClient
韩梦飞沙 韩亚飞 313134555@qq.com yue31313 han_meng_fei_sha httpUrlConnection 超文本传输协议统一资源定位器连接 http 超 ...
- 鸟哥的私房菜:Linux文件与目录管理
1. 目录与路径 1.1 相对路径与绝对路径 绝对路径:路径的写法『一定由根目录 / 写起』,如:/usr/share/doc 这个目录. 相对路径:路径的写法『不是由 / ...
- 说说最小生成树(Minimum Spanning Tree)
minimum spanning tree(MST) 最小生成树是连通无向带权图的一个子图,要求 能够连接图中的所有顶点.无环.路径的权重和为所有路径中最小的. graph-cut 对图的一个切割或者 ...
- [Dynamic Language] Python非子包引用
Python非子包引用 python的搜索路径其实是一个列表(sys.path) 导入模块时python会自动去找搜索这个列表当中的路径,如果路径中存在要导入的模块文件则导入成功. 在项目中如果要引用 ...
- linux 定时任务 crontab 详细解释(转)
cron 是linux的内置服务,但它不自动起来,可以用以下的方法启动.关闭这个服务: 引用: /sbin/service crond start //启动服务 /sbin/service cr ...