ios之SEL

SEL其实是对方法的一种包装,将方法包装成一个SEL类型的数据,去找对应的方法地址。找到方法地址就可以调用方法, 其实消息就是SEL。对于下列方法调用:

[p test2];

主要有以下步骤:

1.把test2包装成SEL类型的数据

2.根据SEL数据找到对应的方法地址

3.根据方法地址调用对应的方法

比如一个类中有两个方法:+test和-test2每个方法在内存中的地址都有一个对应的SEL与之对应

SEL s1 == +test地址

SEL s2 == -test2地址

对象找要调用的方法时,isa指针会根据调用的方法名在类中找到相关的SEL对象(方法地址)去调用。所以,调用方法还可以用如下形式:

[pperformSelector:@selector(test2)];

performSelector:@selector(test2)返回的就是test2的方法地址。

如果方法还有参数,比如- (void)test3:(NSString *)abc,还可以按照如下格式调用:

[pperformSelector:@selector(test3:) [Object:@”abc”]];

对于上述调用方法,test3后一定要加”:“,因为”:”也是有参数方法的方法名的一部分。

时间: 2024-08-02 05:01:03

ios之SEL的相关文章

IOS SEL的理解与使用

   有很多人,认为block的推广可取代代理设计模式,其实block并不能取代代理,代理的模式可以让代码逻辑性更强,更整洁,也会有更高的可读性和可扩展性.相比之下,我觉得block更多的是取代了选择器@selector.    @selector是什么?我们要首先明白SEL,SEL并不是一种对象类型,我们通过xCode的字体颜色就可以判断出来,它是一个关键字,就像int,long一样,它声明了一种类型:类方法指针.其实就可以理解为一个函数指针.比如,我们生命一个叫myLog的函数指针: ? 1

iOS开发之遍历Model类的属性并完善使用Runtime给Model类赋值

在上篇博客<iOS开发之使用Runtime给Model类赋值>中介绍了如何使用运行时在实体类的基类中添加给实体类的属性赋值的方法,这个方法的前提是字典的Key必须和实体类的Property Name相同,然后通过运行时来生成和执行Setter方法给Model类的属性赋值. 通过Runtime来给Model类属性赋值的好处是多多的,它便于代码的后期维护,并且提高了开发效率.当你拿到解析后的字典时你不用一个一个的通过key去把字典的值赋值给相应的Model类的属性,本篇博客中会给出如何去遍历Mod

iOS开发系列--通知与消息机制

概述 在多数移动应用中任何时候都只能有一个应用程序处于活跃状态,如果其他应用此刻发生了一些用户感兴趣的那么通过通知机制就可以告诉用户此时发生的事情.iOS中通知机制又叫消息机制,其包括两类:一类是本地通知:另一类是推送通知,也叫远程通知.两种通知在iOS中的表现一致,可以通过横幅或者弹出提醒两种形式告诉用户,并且点击通知可以会打开应用程序,但是实现原理却完全不同.今天就和大家一块去看一下如何在iOS中实现这两种机制,并且在文章后面会补充通知中心的内容避免初学者对两种概念的混淆. 本地通知 推送通

iOS开发之核心动画(Core Animation)

1.概述 Core Animation是一组非常强大的动画处理API,使用它能做出非常炫丽的动画效果,而且往往是事半功倍,使用它需要先添加QuartzCore.framework和引入对应的框架<QuartzCore/QuartzCore.h>. 特别注意的是核心动画的动画效果只是"假象",产生动画的那个view实际上并未发生任何变化. 开发步骤: 第一步:初始化一个动画对象(CAAnimation)并设置一些动画相关属性. 第二步:添加动画对象到层(CALayer)中,开

IOS NSTimer 定时器用法总结

NSTimer在IOS开发中会经常用到,尤其是小型游戏,然而对于初学者时常会注意不到其中的内存释放问题,将其基本用法总结如下: 一.初始化方法:有五种初始化方法,分别是 + (NSTimer *)timerWithTimeInterval:(NSTimeInterval)ti invocation:(NSInvocation *)invocation repeats:(BOOL)yesOrNo; ? 1 2 3 4 5 6 7 8 9 10 11 12 - (void)viewDidLoad {

iOS开发:多线程编程之NSThread的使用详解

  1.简介: 1.1 iOS有三种多线程编程的技术,分别是: 1..NSThread 2.Cocoa NSOperation (iOS多线程编程之NSOperation和NSOperationQueue的使用) 3.GCD 全称:Grand Central Dispatch( iOS多线程编程之Grand Central Dispatch(GCD)介绍和使用) 这三种编程方式从上到下,抽象度层次是从低到高的,抽象度越高的使用越简单,也是Apple最推荐使用的. 这篇我们主要介绍和使用NSThr

iOS开发:UIView的Animation效果

  所谓动画效果,就是会动的画,到iOS App中来说的话,就是各种UIView的移动. 想想看,如果我们自己来实现所有UIView的动画效果,需要考虑些什么东西呢? * 该UIView现在在哪儿? * 该UIView最后会动到哪儿? * 该UIView以什么样的方式移动到那儿? * 该动画持续多长时间? * 每次移动的最小时间间隔? * 每次最小时间间隔的移动的应该移动到哪儿? * -. 想想这是一个多么杀脑细胞的过程,尤其是每一次的动画过程都要重复这一折磨的过程. 还好,现实比想象的美好,

IOS开发自定义CheckBox控件

IOS本身没有系统的CheckBox组件,但是实际开发中会经常用到,所以专门写了一个CheckBox控件,直接上代码 效果图: UICheckBoxButton.h文件如下: #import #import "Common.h" @interface UICheckBoxButton : UIControl { UILabel *label; UIImageView *icon; BOOL checked; id delegate; } @property (retain, nonat

iOS 运行时添加属性和方法

  第一种:runtime.h里的方法BOOL class_addProperty(Class cls, const char *name, const objc_property_attribute_t *attributes, unsigned int attributeCount) #include <objc/runtime.h> #import <Foundation/Foundation.h> @interface SomeClass : NSObject { NSSt