实战解析 Categor 对已有类进行扩展
Category 类别
功能介绍:
Category 可以在已经存在的类里添加新的方法,在不改变已有类的情况下经行扩展!
而且ios 也提供了对字符串 NSString NSDictionary NSArray 的扩展,
主要作用:
category 可以在不获悉,不改变原来代码的情况下往里面添加新的方法,
网上说的3个作用
要有3个作用:
(1)将类的实现分散到多个不同文件或多个不同框架中。
(2)创建对私有方法的前向引用。
(3)向对象添加非正式协议。
继承可以增加,修改或者删除方法,并且可以增加属性。
下面的说法更容易让人理解 当其实说的都差不多
1. 在不创建继承类的情况下实现对已有类的扩展。
2. 简化类的开发工作(当一个类需要多个程序员协同开发的时候,Category可以将同一个类根据用途分别放在不同的源文件中,从而便于程序员独立开发相应的方法集合)。
3. 将常用的相关的方法分组。
4. 在没有源代码的情况下可以用来修复BUG。
注意事项
1 如果你添加的方法名和被扩展的类里类名相同,扩展的类会被覆盖!这的地方一定要注意,如何你覆盖了里面的方法可能引用bug,如果想覆盖这个方法最好弄清楚里面的调用情况或者在那个函数里面的代码的基础上进行扩展。
2 在使用Category 时 只能添加新的方法,不能添加新的变量
3 Category 的名字必须是唯一的 例如 @interface SetDogMessage(CATEGORY) 里的 CATEGORY 必须是唯一的
下面看下代码吧
创建了 一个SetDogMessage 类 两个变量,一个方法。
#import <Foundation/Foundation.h>
@interface SetDogMessage : NSObject
@property (strong,nonatomic)NSString * dogNameString;
@property (strong,nonatomic)NSString * dogAgeString;
-(void)dogLikeEatFood;
@end
/SetDogMessage/.m//
#import "SetDogMessage.h"
@implementation SetDogMessage
@synthesize dogAgeString;
@synthesize dogNameString;
-(void)dogLikeEatFood
{
NSLog(@"my dog name is %@, it age is %@ ,like eat bone",dogNameString,dogAgeString);
}
@end
现在我创建一个扩展的类 CategoryDogLikePlay
引用被扩展方法的头文件 #import "SetDogMessage.h"
改变 interface,implementation 的接口名字改成被扩展的类名,并设置一个Category 名字 如(CATEGORY)
#import <Foundation/Foundation.h>
#import "SetDogMessage.h"
@interface SetDogMessage(CATEGORY)
-(void)doglikeRun;
@end
//CategoryDogLikePlay.m/文件
#import "CategoryDogLikePlay.h"
@implementation SetDogMessage(CATEGORY)
-(void)doglikeRun
{
NSLog(@"dog like run");
}
@end
- (void)viewDidLoad
{
[superviewDidLoad];
SetDogMessage *dog = [[SetDogMessagealloc]init];
dog.dogNameString = @"大黄";
dog.dogAgeString = @"10";
[dog dogLikeEatFood];
[dog doglikeRun ];
}
这个例子真的是很简单!但是在项目中用到Category 时候你就会发现真的很好用!
实战解析 Categor 对已有类进行扩展相关推荐
- Python3网络爬虫快速入门实战解析
Python3网络爬虫快速入门实战解析 标签: python网络爬虫 2017-09-28 14:48 6266人阅读 评论(34) 收藏 举报 分类: Python(26) 作者同类文章X 版权声明 ...
- python3 爬虫实例_【实战练习】Python3网络爬虫快速入门实战解析(上)
原标题:[实战练习]Python3网络爬虫快速入门实战解析(上) 摘要 使用python3学习网络爬虫,快速入门静态网站爬取和动态网站爬取 [ 前言 ] 强烈建议:请在电脑的陪同下,阅读本文.本文以实 ...
- Python教程:网络爬虫快速入门实战解析
建议: 请在电脑的陪同下,阅读本文.本文以实战为主,阅读过程如稍有不适,还望多加练习. 网络爬虫简介 网络爬虫,也叫网络蜘蛛(Web Spider).它根据网页地址(URL)爬取网页内容,而网页地址( ...
- 区块链交易隐私如何保证?华为零知识证明技术实战解析
摘要:本文通过介绍华为如何在同态加密及零知识证明框架的集成介绍来介绍了一些对金融领域交易隐私保护的思路,通过代码结和应用场景描述了zksnark如何集成到现有联盟链体系保护交易隐私. 本文分享自华为云 ...
- Cocos2d-x 3.x项目实战:星空大战(射击类游戏)-李宁-专题视频课程
Cocos2d-x 3.x项目实战:星空大战(射击类游戏)-17683人已学习 课程介绍 本课程是<从零开始掌握Cocos2d-x 3.0(基于3.0正式版) >课程配套的 ...
- Python3 网络爬虫快速入门实战解析
点击上方"Python高校",关注 文末干货立马到手 作者:Jack Cui http://cuijiahua.com/blog/2017/10/spider_tutorial_1 ...
- beautifulsoup网页爬虫解析_Python3 网络爬虫快速入门实战解析
点击上方"Python高校",关注 文末干货立马到手 作者:Jack Cui http://cuijiahua.com/blog/2017/10/spider_tutorial_1 ...
- Radware负载均衡项目配置实战解析之四-VRRP双机配置与同步
接上一小节内容,这一节主要介绍RADWARE负载均衡实战项目中的VRRP双机配置与同步问题.radware在实际的业务与配置中,一般都会配置双机来实现冗余.无论是主用设备还是备用设备都要进行基本配置. ...
- 聚类分析基础知识总结及实战解析
聚类分析基础知识总结及实战解析 聚类分析是没有给定划分类别的情况下,根据样本相似度进行样本分组的一种方法,是一种非监督的学习算法.聚类的输入是一组未被标记的样本,聚类根据数据自身的距离或相似度划分为若 ...
最新文章
- Linux core dump的详细介绍及使用
- jq选中单选框后文本框不可编辑_打开速度最快最强大的PDF免费工具,编辑+阅读功能一体...
- 32GSSD组建RAID0后对硬盘的加速效果
- 销售订单屏幕增强及功能增强
- mysql更新视图的时候有时候可以不满足视图条件的值也能更新成功
- xgboost使用调参
- 怎么调用系统通讯录并向被选中联系人发送短信
- vba 定义类_VBA中类的介绍及应用简介
- 用Jquery实现选项卡功能
- TIOBE 11 月榜单:C、Swift、Go、D 与 Rust 起起伏伏
- HTML5前端开发就业前景,高薪背后的原因分析!
- interface接口_Java程序设计--接口interface(笔记)
- Java并发容器--ConcurrentLinkedQueue
- 硅谷大佬们屡次推荐的10本书,你看过几本?
- Java 用两个队列实现一个栈
- ubuntu报错 E:无法定位软件包
- 分享一下linux系统的精彩描述
- 易语言游戏选服务器,网吧游戏菜单服务器含服务器端和客户端
- springboot 解决缓慢的http攻击
- Android平台美颜相机/Camera实时滤镜/视频编解码/影像后期/人脸技术探索——目录