JAVA里面要想给类增加个方法,必须继承才行,要想改变方法需要覆盖,感觉总有不能办到的,而且也麻烦。
ios的 Categories真是让我打开眼界啊!直接就可以给FrameWork的类增加函数,且可以修改。牛逼啊,即使是不开源又能怎地,就是封装的好啊,好用就行了呗。要是研究OS还是去找Android吧。
以下内容是copy的:http://mobile.51cto.com/hot-232833_8.htm
当然他也是翻译的,我们可以直接看最原始的文章风格也非常漂亮的:http://cocoadevcentral.com/d/learn_objectivec/
Categories是Objective-C里面最常用到的功能之一。 基本上category可以让我们给已经存在的类增加方法,而不需要增加一个子类。而且不需要知道它内部具体的实现。
如果我们想增加某个framework自带的类的方法,这非常有效。如果我们想在我们程序工程的NSString能够增加一个方法,我们就可以使用category。甚至都不需要自己实现一个NSString的子类。
比如,我们想在NSString里面增加一个方法来判断它是否是一个URL,那我们就可以这么做:
@interface
NSString (NSString_Utils)
- (BOOL
) isUrl;
@end
这跟类的定义非常类似。区别就是category没有父类,而且在括号里面要有category的名字。名字可以随便取,但是习惯叫法会让人比较明白category里面有些什么功能的方法。
这里是具体的实现。但是要注意,这本身并不是一个判断URL很好的实现。我们主要是为了整体的了解category的概念。
#import
"NSObject+NSString_Utils.h"
@implementation
NSObject (NSString_Utils)
- (BOOL
) isUrl
{
if
([self
hasPrefix
:@"http://"
]) {
return
YES
;
}
return
NO;
}
@end
现在我们可以在任何的NSString类对象里都可以调用这个方法了。下面的代码在console里面打印的"string1 is a URL":
- (void
)viewDidLoad
{
[
super
viewDidLoad];
// Do any additional setup after loading the view, typically from a nib.
NSString
*string1 =
@"http://www.apple.com";
if
([string1 isUrl
]) {
NSLog
(
@"string1 is a URL");
}
NSString
*string2 = @"hahha"
;
if
([string2 isUrl
]) {
NSLog
(
@"string1 is a URL");
}
}
跟子类不一样,category不能增加成员变量。我们还可以用category来重写类原先的存在的方法,但是这需要非常非常小心。
记住,当我们通过category来修改一个类的时候,它对应用程序里的这个类所有对象都起作用。
输出结果:
string1 is a URL
分享到:
相关推荐
iOS 个人中心 demo 用collectionView做的
iOS 微信支付demo
ios xmpp demo
iOS定位的demo
ios 蓝牙使用 demo
视频通话,视频流传输,ios视频通话demo
iOS 视频播放Demo源码,网上看到的,供大家一起共同分享学习。
iOS 国际化 demo 博客地址:http://blog.csdn.net/ioswyl88219/article/details/17651933
iOS获取验证码demo
ios 单例学习demo !
一款关于iOS的文件解压缩demo,有详细注释,欢迎大家参考学习
iOS支付宝支付demo
本demo实现了类似qq列表,但能自行扩展的多级列表(demo中实现了4级列表)。满足每次点击cell才发起网络请求获取数据的思路(demo中在每次点击cell的时候创建并加载了更多的model)。满足自定义各级cell。
iOS二维码生成Demo,简单的应用,可以先看一下我的博客,了解一下思路,就可以很方便的实现字符串生成二维码的功能了,希望能帮到你!
iOS 常用动画Demo小总结
ios 手势代码 demo 大全 ios手势代码demo大全
IOS map 定位 Demo ,例子代码
IOS的一个小Demo,大家可以自行研究