有些东西啊,的确大家都会用,而有些东西,还真是慢慢摸索出来的,只有实际运用中,才知道;哇!原来这个方法是这么用的,有这好处;或者说,原来,我可以进行一次很好的封装的。慢慢摸打滚爬,才积累的经验。
自己才工作没多久,在接手别人项目的时候(好家伙,才毕业上班的第一家公司,居然没人带我),都不怎么敢动别人代码,生怕万一一碰,妈的,碰坏了。
期初还真是硬着头皮在别人写的类里写自己的方法,改别人写的东西(当然,那人走了,估计知道了会很生气的)。
后来才慢慢摸索出来,Category的打开方式。
Category是对原有的类进行扩展方法。
比如我上一个iOS写的类A,某个方法逻辑有问题或者写的不够好,在不破坏他的代码时,进行扩展(这也是团队开发必要的,尽量别碰已有的代码,管它写的好不好,留着,确定测试没问题后,再删也不迟)。
A类
比如Hello是已有的方法,但不够完美
@implementation A
-(void)Hello{
//TODO
}
@end
于是我要写我的方法去替换他,于是我创建了Category ,拓展A类
#import "A.h"
@interface A (A1)
-(void)Hello1;
@end
使用
A *a = [[A alloc]init];
// [a Hello]; 暂时注释掉要替换的方法
[a Hello1];
其实我们已经完成了。但最后我发现,虽然只进行了一次扩展,如果有很多呢?岂不是要写很长一串?
#import "A.h"
#import "A+A1.h"
//如果很多
#import "A+A2.h"
#import "A+A3.h"
#import "A+A4.h"
#import "A+A5.h"
其实我们可以建立一个h文件,把功能一类的类存在一个h文件里。只需要导入一次Header.h,就可以。一般我把常用的,都放在一个PCH文件里。
#ifndef Header_h
#define Header_h
#import "A.h"
#import "A+A1.h"
#endif /* Header_h */
使用
#import "ViewController.h"
#import "Header.h" #看这里
@interface ViewController ()
@end
@implementation ViewController
- (void)viewDidLoad {
[super viewDidLoad];
A *a = [[A alloc]init];
// [a Hello];
[a Hello1];
}
@end
的确,写的,真简单,太简单了。往往有些简单的东西,才是我们真正需要记住的东西!它关系到整个软件开发中,协调统一。
网友评论