小白学开发(iOS)OC_ protocol(协议) (2015-08-09)
来源:互联网 发布:软件开发工程师 英语 编辑:程序博客网 时间:2024/06/05 08:03
//
// main.m
// protocol(协议)
//
// Created by admin on 15/8/12.
// Copyright (c) 2015年 admin. All rights reserved.
//
#import <Foundation/Foundation.h>
#import "Person.h"
#import "Student.h"
/*
1. 什么是协议:
> 协议实际上是一种向上抽象的思想
> 协议只是做一些共有方法的声明,不做实现,哪个类使用,则哪个类自己实现
2. 协议的使用方式:
> 建立协议:添加protocol文件,一般命名上要加Protoclo字段
> 使用协议:需要使用的协议的类在.h文件中先import引入,再在类名后添加 <协议名>,再在.M文件中实现方法
3. 注意:
> 一个类中可以使用多个协议,<协议1,协议2,。。。>
> 协议本身也可以遵循其他协议,NSObject是一个基础协议,协议也可以同时遵循多个其他协议
> 在类的继承中,父类遵循的协议,子类同样遵循(即:当通过子类对象调用协议中方法时,先在子类实现中找,找不大则会在父类实现中找)
> 一个类特有的协议我们可以把它直接在这个类的.h文件中直接声明出来写在@interface之前,.m文件中实现
> 协议中的方法有必须实现(@required)的和可选择实现(@optional)的,分别用括号中的关键字区分
> 协议中只能定义方法,不能定义变量
4. 声明一个需要遵循某个协议的变量
> 局部变量: Person < 协议名 > *p = [[Person alloc]init];
> 成员变量: @property(nonatomic,strong) Car<协议名> *car;
*/
int main(int argc,const char * argv[]) {
@autoreleasepool {
Person *p = [[Personalloc]init];
[preading];
[psong];
Student *s = [[Studentalloc]init];
[s reading]; // 子类调用类父类中实现的协议的方法
[ssong];
[s taoke]; // 调用学生类中特有协议的方法
// 定义一个需要遵循StudentProtocol的变量
Person<StudentProtocol> *p1 = [[Personalloc]init];
}
return 0;
}
//
// Person.h
// OC的特有语法
//
// Created by admin on 15/8/12.
// Copyright (c) 2015年 admin. All rights reserved.
//
#import <Foundation/Foundation.h>
#import "StudentProtocol.h"// 引入协议文件
#import "TeacherProtocol.h"
@interface Person :NSObject <StudentProtocol,TeacherProtocol>
// 定义一个需要遵循StudentProtocol的变量
@property (nonatomic,strong)NSString<StudentProtocol> *name;
// 定义一个需要遵循TeacherProtocol的变量
@property (nonatomic,assign)id<TeacherProtocol> obj;
@end
//
// Person.m
// OC的特有语法
//
// Created by admin on 15/8/12.
// Copyright (c) 2015年 admin. All rights reserved.
//
#import "Person.h"
// 实现协议中的方法
@implementation Person
- (void)listen
{
NSLog(@"学生要听课");
}
- (void)reading
{
NSLog(@"学生要读书");
}
-(void)play
{
NSLog(@"学生要玩");
}
- (void)teach
{
NSLog(@"老师要传道授业解惑");
}
-(void)care
{
NSLog(@"老师要关心学生");
}
-(void)song // 这是TeacherProtocol协议中一个选择实现的方法
{
NSLog(@"老师最好会唱歌");
}
@end
//
// StudentProtocol.h
// OC的特有语法
//
// Created by admin on 15/8/12.
// Copyright (c) 2015年 admin. All rights reserved.
//
#import <Foundation/Foundation.h>
@protocol StudentProtocol <NSObject>
@required
- (void)listen;
- (void)reading;
- (void)play;
@optional
- (void)dajia;
@end
//
// TeacherProtocol.h
// OC的特有语法
//
// Created by admin on 15/8/12.
// Copyright (c) 2015年 admin. All rights reserved.
//
#import <Foundation/Foundation.h>
@protocol TeacherProtocol <NSObject>
@required
- (void)teach;
- (void)care;
@optional
- (void)song;
@end
//
// TeacherProtocol.h
// OC的特有语法
//
// Created by admin on 15/8/12.
// Copyright (c) 2015年 admin. All rights reserved.
//
#import <Foundation/Foundation.h>
@protocol TeacherProtocol <NSObject>
@required
- (void)teach;
- (void)care;
@optional
- (void)song;
@end
//
// Student.h
// OC的特有语法
//
// Created by admin on 15/8/12.
// Copyright (c) 2015年 admin. All rights reserved.
//
#import "Person.h"
@protocol StuProtocol<NSObject>
- (void)taoke;
@end
@interface Student :Person <StuProtocol>
@end
//
// Student.m
// OC的特有语法
//
// Created by admin on 15/8/12.
// Copyright (c) 2015年 admin. All rights reserved.
//
#import "Student.h"
@implementation Student
- (void)taoke
{
NSLog(@"学生逃课,这个是学上类特有的协议");
}
@end
- 小白学开发(iOS)OC_ protocol(协议) (2015-08-09)
- 小白学开发(iOS)OC_继承(2015-07-26)
- 小白学开发(iOS)OC_多态(2015-07-27)
- 小白学开发(iOS)OC_ block数据类型(2015-08-08)
- 小白学开发(iOS)OC_手动内存管理(2015-08-02)
- 小白学开发(iOS)OC_ 单个对象的内存管理(2015-08-02)
- 小白学开发(iOS)OC_多个对象的内存管理(2015-08-03)
- 小白学开发(iOS)OC_ set方法的内存管理分析(2015-08-04)
- 小白学开发(iOS)OC_ @property 参数(2015-08-05)
- 小白学开发(iOS)OC_ 使用继承来扩充类(2015-08-07)
- 小白学开发(iOS)OC_ SEL数据类型(2015-08-10)
- 小白学开发(iOS)OC_ Foundation之NSString类(2015-08-11)
- 小白学开发(iOS)OC_ 字符串的获取 (2015-08-11)
- 小白学开发(iOS)OC_ 字符串的比较判断(2015-08-12)
- 小白学开发(iOS)OC_基本数据类型转换成字符串(2015-08-12)
- 小白学开发(iOS)OC_ 字符串重组(2015-08-13)
- 小白学开发(iOS)OC_ 字符串写入文件(2015-08-13)
- 小白学开发(iOS)OC_ 从文件中读取字符串内容(2015-08-14)
- iOS中storyboard故事板使用Segue跳转界面、传值
- 不要用子类!Swift的核心是面向协议
- 3531上用live555实现RTSP Server
- 可输入初始值得60进制计数器
- Android出现W/System.err(384): java.io.FileNotFoundException: /mnt/sdcard/cache/XXX
- 小白学开发(iOS)OC_ protocol(协议) (2015-08-09)
- display:inline-block解决行元素没有办法设置宽高的问题
- 常见HTTP状态码
- PHP ZipArchive 实现压缩解压Zip文件
- jsp页面中jstl标签详解
- Arcgis相关参考文档目录贴
- HDU 5372 Segment Game (MUT#7 树状数组+离散化)
- 【黑马程序员-学习笔记】OC-成员变量与属性
- Android之如何给ListView添加监听方法