• Object C学习笔记18-SEL,@ selector,Class,@class


      本章是对上一章<<Object C学习笔记17-动态判断和选择器>>的一点补充,所以比较简单点。

      一. 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方法:

        [对象 performSelector:SEL变量 withObject:参数1 withObject:参数2]; 
    在调用respondsToSelector:@selector(method)时,这个method只有在该方法存在参数时需要 ":",如果该方法不需要参数就不需要加这个冒号。否则,编译不会报错,只是执行返回的值不对。当然如果方法有多个参数,需要多个冒号,参数有名称的需要带上参数名称。 

      二. @selector 

        @selector 其实就是选择器,使用@selector放回SELleixing,所以SEL和@selector一般都是同时使用的。

    SEL sel=@selector(write:andAge:);

        @selector方法用法如上,但是这里要注意一下如果方法有输入参数则需要使用: ,如果没有参数则不要:

    SEL sel1=@selector(eat);

        如果使用可以参考上一章所述内容。

      三. 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 替换之前的这种方式。

     

  • 相关阅读:
    Photoshop 基础七 位图 矢量图 栅格化
    Photoshop 基础六 图层
    Warfare And Logistics UVALive
    Walk Through the Forest UVA
    Airport Express UVA
    Guess UVALive
    Play on Words UVA
    The Necklace UVA
    Food Delivery ZOJ
    Brackets Sequence POJ
  • 原文地址:https://www.cnblogs.com/qingyuan/p/3618305.html
Copyright © 2020-2023  润新知