本章是对上一章<<Object C学习笔记17-动态判断和选择器>>的一点补充,因此比较简单点。html
一. SEL 类型函数
在上一篇介绍了几个方法,都只是介绍了其使用方式可是没有具体介绍参数:学习
- (id)performSelector:(SEL)aSelector; - (id)performSelector:(SEL)aSelector withObject:(id)object; - (id)performSelector:(SEL)aSelector withObject:(id)object1 withObject:(id)object2; - (BOOL)respondsToSelector:(SEL)aSelector;
其中有看到SEL类型。SEL至关于函数指针。下面介绍performSelector方法:spa
[对象 performSelector:SEL变量 withObject:参数1 withObject:参数2];
在调用respondsToSelector:@selector(method)时,这个method只有在该方法存在参数时须要 ":",若是该方法不须要参数就不须要加这个冒号。不然,编译不会报错,只是执行返回的值不对。固然若是方法有多个参数,须要多个冒号,参数有名称的须要带上参数名称。 指针
二. @selector code
@selector 其实就是选择器,使用@selector放回SELleixing,因此SEL和@selector通常都是同时使用的。orm
SEL sel=@selector(write:andAge:);
@selector方法用法如上,可是这里要注意一下若是方法有输入参数则须要使用: ,若是没有参数则不要:xml
SEL sel1=@selector(eat);
若是使用能够参考上一章所述内容。htm
三. Class对象
先看看Class类型的代码以下:
typedef struct objc_class *Class; typedef struct objc_object { Class isa; } *id;
从上面的代码能够看到Class 是结构类型,可使用以下方式获取一个对象的Class
Class c=[Person class];
四. @class
因为头文件的相互包含及依赖关系,每每很小的改动就须要从新编译不少的文件。Object-C提供了一种方法能够减小因为依赖引发的从新编译:@class 来告诉编译器这是一个类,编译器只须要经过指针来引用它便可,并不须要知道关于这个类的更多信息。以此来减小编译工做。
#import <Foundation/Foundation.h> @class Person; @interface Student : NSObject{ Person *p; } @end
经过以上代码能够看到,@class Person . 而后咱们在Student 类中就能够直接引用Person这个类了。在以往的时候须要使用
#import "Person.h" 才能够。 咱们使用@class 替换以前的这种方式。