OC学习笔记SEL类型初步理解

17 篇文章 0 订阅

SET是对方法的包装,将方法包装成一个sel类型的数据,去寻找对应的那个方法的地址,找到方法地址就能找到方法调用方法了

SEL 类成员方法的指针
可以理解 @selector()就是取类方法的编号,他的行为基本可以等同C语言的中函数指针,只不过C语言中,可以把函数名直接赋给一个函数指针,而Object-C的类不能直接应用函数指针,这样只能做一个@selector语法来取.
它的结果是一个SEL类型。这个类型本质是类方法的编号(函数地址)


内存存储的细节【内存栈区    内存堆区   内存代码区】

类实例出来的对象从内存栈区指向内存堆区,内存堆区的实例对象指向内存堆区的类对象,然后内存堆区的类对象在指向内存代码区【其中还需要几个过程】


方法的存储位置

1.在内存中每个类的方法都存储在类对象中
2.每个方法都有一个与之对应的SEL类型的数据
3.根据一个SEL数据就可以找到对应的方法地址,进而调用方法
4.SEL类型的定义: typedef struct objc_selector *SEL



所以SEL就可以理解成方法的指针


调用代码

#import <Foundation/Foundation.h>
#import "Person.h"

int main(int argc, const char * argv[]) {
    @autoreleasepool {
        Person  *p = [Person new];
        [p test];
        //手动吧test包装成SEL类型
        
        SEL s1 = @selector(test);//结构体不加星号定义,对象再加星号定义,test方法的SEL
        
        [p performSelector:s1];//响应方法,然后可以直接调用这个方法
        
        
    }
    return 0;
}





  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值