类别(category)
虽然做了半年多的ios,虽说做东西是可以做出来,但是真让我说理论上的东西,经常说不上来,我知道有那个东西,但是不值得怎么说,看来得好好总结总结。
如果有理解有误的地方,欢迎大家指正。
言归正传,来说说什么事category(类别),它的用途,优缺点等。
category,类别,是一种为现有的类添加新方法的方式。即使我们不知道该类的源代码,但是通过使用category,为该类添加了新方法,并可以使用该类的成员变量;只要实现了类别的方法,在任何使用类的地方,类的对象都可以使用该方法。
类别也可以重写原始类的方法。但是与继承不同的是,因为类别的优先级高,只要你使用类别重写了原是类的方法,你就再也无法访问原始类中的该方法。而继承是可以任意访问子类重写的方法和父类的方法的。
类别不能添加新的实例变量,这也是类别的局限性;(其实类别也可以添加实例变量,但是很麻烦,比如这篇文章http://blog.csdn.net/linkai5696/article/details/6644400)
而继承的子类是可以随便添加新的实例变量的;继承了实现了类别的类时,子类也会完全继承类别中的方法。
类别的作用:
1.将类的实现分先到多个不同的文件或者不同框架中。
2.创建对私有方法的前向应用。
3. 向对象添加非正式协议。
类别的声明如下:
//向NSString类添加类别NumberConvenience,添加的类别方法为lengthAsNumber
@interface NSString (NumberConvenience)
- (NSString *) lengthAsNumber;
@end;