Objective-C之协议

简介:

其实OC中的协议有点像接口或称抽象类。OC中的协议定义了一系列的方法 , 有些方法是必须实现的 , 有些方法是可以不用实现的。

定义一个协议的关键字是 : @protocol

例如:

@protocol Ainy

    -(void) Print;

@end

如上就是一个协议 , 协议的名称为Ainy 。定义了一个方法为-(void) Print 。 注意协议是在h文件中定义的 , 例如:

01.png



如何实现这个Ainy协议:使用<>括号 , 如下

我新建了一个Dog类 , 继承了Animal , 并且需要实现协议Ainy代码如下:

02.jpg

在Dog.m中的实现如下:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
//
//  Dog.m
//  PartDemo
//
//  Created by Apple on 2017/12/3.
//  Copyright  2017年 Apple. All rights reserved.
//
 
#import "Dog.h"
 
@implementation Dog
@synthesize ID;
-( void ) Print{
     NSLog(@ "Xiao Huang" );
}
@end

当然 , 可能在Animal中定义了 Aonaufly协议 , 如何同时显示Ainy 和 Aonaufly协议呢 ??

@interface Dog : Animal <Ainy , Aonaufly>用,隔开


问题来了 , 怎么定义可以不需要实现的方法 和 如何定义一定要实现的方法

@optional 定义不一定需要实现的方法(在其后的在所有的方法)

@required 定义一定需要实现的方法(在其后的所有方法)

03.png

如何知道此类实现了Ainy协议了呢??

id Object;

if( [Object conformsToProtocol : @protocol (Ainy)] == YES ){

}


当让如果你知道Object一定实现了协议Ainy , 你可以这么干

id <Ainy> Object;


加入Object实现了协议Ainy , 如何知道Object实现了Ainy的方法 Dance呢 , 因为Dance是可以不用实现的方法

if( [Object respondsToSelector: @selector (Dance)] == YES ){

}


















本文转自Aonaufly51CTO博客,原文链接: http://blog.51cto.com/aonaufly/2046979,如需转载请自行联系原作者



相关文章
|
JavaScript 前端开发 Java
Objective-C协议(protocol)和委托(delegate)的基本概念(★firecat推荐★)
Objective-C协议(protocol)和委托(delegate)的基本概念(★firecat推荐★)
255 0
|
Java 程序员 iOS开发
|
iOS开发 编译器 数据安全/隐私保护
[精通Objective-C]类,接口,协议与扩展
[精通Objective-C]类,接口,协议与扩展 参考书籍:《精通Objective-C》【美】 Keith Lee 目录 精通Objective-C类接口协议与扩展 目录 类 类的接口 类的实现 实例变量 属性 方法 协议 分类 扩展 类 创建一个类名为Atom,继承于NSObject的类。Atom类由两个文件组成,Atom.h和
2072 0
|
iOS开发
Objective-c下的深拷贝、浅拷贝以及NSCopying协议
深拷贝&amp;浅拷贝 无论使用什么语言编程我们都必须考虑深拷贝和浅拷贝的问题,只是Objective-c提供了一个实现深拷贝的标准机制而已。所谓浅拷贝其实就是指针的赋值,例如: NSString* str1 = @"Hello World!"; NSString* str2 = str1; 此时str1和str2同时指向了内存中的同一片区域,无论使用哪个指针对该区域进行了改动,
1428 0
|
编解码 iOS开发 数据库管理
Objective-C下的NSCoding协议
原文出处:http://blog.csdn.net/likendsl/article/details/8513733 由于Sqlite数据库的blob数据和NSData的兼容比较好,我想尝试把一个NSArray存入Sqlite。Sqlite不支持数组的直接存储,所以我寻找了一些数组转化为NSData的方法。网上大多数的解决办法都是针对于字符数组,eg:  NSArray*array0
1347 0