知识点汇总(一)

NSObject的class方法。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15

@interface MViewStage : UIViewController

@end

@implementation MViewStage

- (void)viewDidLoad{
[super viewDidLoad];
NSLog(@"self.class = %@",[self class]);
NSLog(@"super.class = %@",[self class]);
NSLog(@"self.superClass = %@",[self superclass]);
}

@end

如图所示,我想打印出继承自UIViewController的一个子类MViewStage,打印出self.class,super.class,self.superClass,这三个的值,按照之前的认知,第一个和最后一个毋庸置疑,分别是,MViewStage和UIViewController,只有第二个,super,我认为要打印的是super的class,应该是UIViewController。但是打印结果如下:

1
2
3
2016-07-18 13:35:36.139 RunTimeLearning[6892:79426] self.class = MViewStage
2016-07-18 13:35:36.139 RunTimeLearning[6892:79426] super.class = MViewStage
2016-07-18 13:35:36.139 RunTimeLearning[6892:79426] self.superClass = UIViewController

很明显super.class打印出的内容是当前对象的类MViewStage。

!!!为什么呢?

API中查看可以看到如下描述信息:

1
2
3
4
5

- (Class)class
Description
Returns the class object for the receiver’s class.
The class object for the receiver’s class.

可以看出,class返回的类是当前selector的接受者,上例所述的MViewStage的对象,因此返回类型为MViewStage。