A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

© 池莉娘子 中级黑马   /  2015-7-10 14:08  /  964 人查看  /  2 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文



    声明一些方法,注意只能声明方法,不能声明变量和实现方法。
格式:(只有一个.h文件)
@protocol 协议名

@end
    当某个类需要用到这个协议的这些方法时,我们称这个类遵守这个协议,简单说就是拥有了这些方法的声明。
格式:
@interface Person : NSObject <协议1,协议2,...>
@end
    协议中的方法有的要求类必须实现,有的则不强制要求实现,所以@protocol中有两个关键字:
@require:是必须实现的,默认就是这个,但是不实现只会警告,不会报错
@optional:可选择是否实现
    协议也是可以遵守其他协议的。
基协议:NSObject,基类NSObject时遵守基协议的
@protocol 协议名 <NSObject,...>

@end
    我们在定义一个变量时,也是可以让这个变量保存的对象遵守某个协议
Person<协议名> *p;
id<协议名> p;
NSObject<协议名> *p;
@property(nonatomic strong) Person<协议名> *p;
这种多用在代理模式设计里面
分类和协议的比较
*协议可单独定义在.h文件中,也可以定义在某个类中
1.如果这个协议只用在某个类中,那么应该把这个协议定义在该类中
2,如果这个协议很多类都用,那么应该定义在单独文件中
*分类可单独写在.h和.m文件中,也可以定义在某个类中,一般情况下,都是单独写在自己的.h和.m文件中

2 个回复

倒序浏览
基础视频教程没学到啊。。。
回复 使用道具 举报
用晦而明 发表于 2015-7-10 14:19
基础视频教程没学到啊。。。

怎么感觉大家看的视频都不一样呢
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马