zoukankan      html  css  js  c++  java
  • Object C学习笔记18-SEL,@ selector,Class,@class

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

  • 相关阅读:
    【SDOI2019】—世界地图(虚树+Kruscal)
    【SDOI2019】—世界地图(虚树+Kruscal)
    【SDOI2019】—热闹的聚会与尴尬的聚会(图论)
    【SDOI2019】—热闹的聚会与尴尬的聚会(图论)
    【BZOJ3153】—Sone1(Top-Tree)
    【BZOJ3153】—Sone1(Top-Tree)
    【UOJ #284】— 快乐游戏鸡(长链剖分+线段树)
    【UOJ #284】— 快乐游戏鸡(长链剖分+线段树)
    【BZOJ4372】—烁烁的游戏(动态点分治)
    【BZOJ4372】—烁烁的游戏(动态点分治)
  • 原文地址:https://www.cnblogs.com/jiuyi/p/10094657.html
Copyright © 2011-2022 走看看