您的位置:首页 > 其它

协议Protocol

2015-09-24 18:52 260 查看
对协议的认识:

1.协议是只能用来声明方法,不能声明成员变量,也不能写类的实现

2.如果某个类遵守了这个协议,也就拥有了协议所声明的方法

3.继承:父类遵守了这个协议,子类也遵守这个协议<>

4.协议声明的方法任何类都可以实现

5.协议弥补了OC单继承,可以遵守多个协议

6.最根本最基本的协议是<NSObject>,他声明了很多基本的方法

7.同样协议之间可以遵守,也就有了协议中的方法声明

Demo

//  Student.h
//  协议Dome
//
//  Created by administrator on 15-9-24.
//  Copyright (c) 2015年 Ytt. All rights reserved.
//

#import <Foundation/Foundation.h>

#import "OneProtocol.h"
@interface Student : NSObject <OneProtocol>
- (void)study;

@end
#import "Student.h"

@implementation Student

-(void)study
{
NSLog(@"study!");
}

-(void)finishTask{
NSLog(@"完成任务!");
}

-(void)dontLate
{
NSLog(@"不迟到!");
}

-(void)wearNeat
{
NSLog(@"穿戴整洁!");
}


//  OneProtocol.h
//  协议Dome
//
//  Created by administrator on 15-9-24.
//  Copyright (c) 2015年 Ytt. All rights reserved.
//

#import <Foundation/Foundation.h>

@protocol OneProtocol <NSObject>

//必须实现
@required
- (void)finishTask;
- (void)dontLate;

@optional
- (void)wearNeat;

@end


//  main.m
//  协议Dome
//
//  Created by administrator on 15-9-24.
//  Copyright (c) 2015年 Ytt. All rights reserved.
//

#import <Foundation/Foundation.h>
#import "Student.h"
int main(int argc, const char * argv[]) {
@autoreleasepool {
Student *stu = [[Student alloc]init];
[stu finishTask];
[stu dontLate];

if ([stu respondsToSelector:@selector(wearNeat)]) {
[stu wearNeat];
}

}
return 0;
}
运行结果:
2015-09-24 16:58:49.627 协议Dome[4639:303] 完成任务!
2015-09-24 16:58:49.629 协议Dome[4639:303] 不迟到!
2015-09-24 16:58:49.629 协议Dome[4639:303] 穿戴整洁!
Program ended with exit code: 0


这样Student类中的stu对象就遵守了OneProtocol协议声明的方法。

1.协议的定义

@protocol 协议名称<NSObject>

方法声明列表

@end;

2.如何遵守协议
(1)类遵守协议
@protocol 类名:父类名 <协议名称1,协议名称2>
@end
(2)协议遵守协议
@protocol 协议名称 <其他协议名称>
@end;
3.协议方法声明中的关键字
(1)required (默认)要求实现,若没有实现则警告但不报错
(2)Optional 不要求实现
4.定义变量时遵守协议的限制
类名<协议名称> *变量名 NSObject<.Myprotocol> *obj;
Id <协议名称> 变量名 id <.Myprotocol> obj1;

5.Property中声明的属性也可以做遵守协议的限制
@property (nonatomic ,strong ) 类名<协议名称> *属性名;
@property (nonatomic ,strong ) id<协议名称> 属性名;
6.当这个协议只需一个类遵守时,可以把协议卸载这个类里面,当这个协议需要多个类去实现时,就写在.h文件中

参考链接:http://www.cnblogs.com/wendingding/p/3709604.html。谢谢博主的总结。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: