Objective-C中的类目和延展
类目:为已知的类增加新的方法;延展:通知在本类的定义里使用类目来声明私有方法;
一、类目:
1.类目方法的应用:
- 对现有类进行扩展:比如:可以扩展Cocoatouch框架中的类,在类目中增加的方法会被子类继承,而且在运行时跟其他的方法没有区别。
- 作为子类的替代手段:不需要定义和使用一个子类,可以通过类目直接向已有的类里增加方法。
- 对类中的方法归类:利用catigory把一个庞大的类划分为小块来分别进行开发,从而更好地对类中的方法进行更新和维护。
2.类目方法的局限性:
- 无法向类目中添加新的实例变量,类目没有位置来容纳实例变量。如果想增加类的实例变量,只能通过定义子类的方式。
- 如若,在类目中覆盖先后类的方法。这样会引起super消息的断裂,因为类目总的方法具有更高的优先级,因此,一般不要覆盖现有类中的方法。
3.类目的定义:
类目的命名规则:类名+扩展方法,如“NSString+Revert”。类目的接口声明与类的定义十分相似,但类目不继承父类,只需要带有一个括号,表明该类目的主要用途。
NSString+Revert.h文件:
#import <Foundation/Foundation.h> @interface NSString (Revert) - (void)test; @end
NSString+Revert.m文件:
#import "NSString+Revert.h" @implementation NSString (Revert) - (void)test{ } @end
二、延展:
类的延展可以看作是一种匿名的类目,类有时需要一些只为自己所见,所用的私有方法这种私有方法可以通过延展的方式来声明,延展中定义的方法在类本身的@implementation代码区域中进行实现。
@interface MyObject : NSObject { NSNumber *number; } - (NSNumber *)number; @end @interface MyObject (Setter) - (void)setNumber:(NSNumber *)newNumber; @end @implementation MyObject - (NSNumber *)number { return number; } - (void)setNumber:(NSNumber *)newNumber {!//do something } @end
当在定义延展的时候不提供类目名时,延展中定义的方法既被视为“必须实现”的API在这种情况下,如果方法缺少实现代码,则编译器会报警告,此时方法的实现必须出现在类主体的@implementation代码块中。
相关推荐
fort0 2020-05-16
81570790 2020-04-16
86540698 2020-04-08
zhoutaifeng 2020-03-07
好好学习天天 2020-03-06
InterestSoul 2020-02-17
82467413 2019-12-31
84407518 2012-07-16
81570790 2013-07-01
83254851 2013-08-29
84334052 2019-11-19
86540698 2019-11-19
84467715 2011-07-25
81731290 2014-03-22
85437811 2014-03-22
dahuichen 2019-10-25
ObjectiveC 2011-09-20
80530297 2015-04-14
80530297 2015-04-20