Selector
原文: https://developer.apple.com/library/ios/documentation/General/Conceptual/DevPedia-CocoaCore/Selector.html#//apple_ref/doc/uid/TP40008195-CH48-SW1
Selector
A selector is the name used to select a method to execute for an object, or the unique identifier that replaces the name when the source code is compiled. A selector by itself doesn’t do anything. It simply identifies a method. The only thing that makes the selector method name different from a plain string is that the compiler makes sure that selectors are unique. What makes a selector useful is that (in conjunction with the runtime) it acts like a dynamic function pointer that, for a given name, automatically points to the implementation of a method appropriate for whichever class it’s used with. Suppose you had a selector for the method run, and classes Dog, Athlete, and ComputerSimulation (each of which implemented a method run). The selector could be used with an instance of each of the classes to invoke its run method—even though the implementation might be different for each.
Getting a Selector
Compiled selectors are of type SEL. There are two common ways to get a selector:
- At compile time, you use the compiler directive - @selector.- SEL aSelector = @selector(methodName); 
- At runtime, you use the - NSSelectorFromStringfunction, where the string is the name of the method:- SEL aSelector = NSSelectorFromString(@"methodName"); - You use a selector created from a string when you want your code to send a message whose name you may not know until runtime. 
Using a Selector
You can invoke a method using a selector with performSelector: and other similar methods.
| SEL aSelector = @selector(run); | 
| [aDog performSelector:aSelector]; | 
| [anAthlete performSelector:aSelector]; | 
| [aComputerSimulation performSelector:aSelector]; | 
(You use this technique in special situations, such as when you implement an object that uses the target-action design pattern. Normally, you simply invoke the method directly.)
Definitive Discussion
Selector的更多相关文章
- Android基础测试题(四)
		看了前两道题大家有没有发现,测试题少了(一),大家猜猜测试题(一)是什么? Android基础测试题(四): 需求: 建一个方法,格式化输出2016-11-14 10:15:26格式的当前时间,然后截 ... 
- Bootstrap<基础十四> 按钮下拉菜单
		使用 Bootstrap class 向按钮添加下拉菜单.如需向按钮添加下拉菜单,只需要简单地在在一个 .btn-group 中放置按钮和下拉菜单即可.也可以使用 <span class=&qu ... 
- Android入门(十四)内容提供器-实现跨程序共享实例
		原文链接:http://www.orlion.ga/661/ 打开SQLite博文中创建的 DatabaseDemo项目,首先将 MyDatabaseHelper中使用 Toast弹出创建数据库成功的 ... 
- android学习十四(android的接收短信)
		收发短信是每一个手机主要的操作,android手机当然也能够接收短信了. android系统提供了一系列的API,使得我们能够在自己的应用程序里接收和发送短信. 事实上接收短信主要是利用我们前面学过的 ... 
- android基础(四)service
		Service的两种启动方式:startService()与bindService() statService:生命周期:[onCreate()- >onStartCommand()-&g ... 
- Android进阶(十四)Android Adapter详解
		Android Adapter详解 Android是完全遵循MVC模式设计的框架,Activity是Controller,layout是View.因为layout五花八门,很多数据都不能直接绑定上去, ... 
- C++学习基础十四——基础类型vector
		一.vector的使用 1. #include <vector> 2. 初始化的四种方法 vector<T> v1; vector<T> v2(v1); vecto ... 
- android 学习十四 探索安全性和权限
		1.部署安全性:应用程序必须使用数字证书才能安装到设备上. 2.执行期间的安全性: 2.1 使用独立进程 2.2 使用固定唯一用户ID 2.3 申明性权限模型 3数字证书 ... 
- <Android 基础(四)> RecyclerView
		介绍 RecyclerView是ListView的豪华增强版.它主要包含以下几处新的特性,如ViewHolder,ItemDecorator,LayoutManager,SmothScroller以及 ... 
- java基础(十四)-----详解匿名内部类——Java高级开发必须懂的
		在这篇博客中你可以了解到匿名内部类的使用.匿名内部类要注意的事项.匿名内部类使用的形参为何要为final. 使用匿名内部类内部类 匿名内部类由于没有名字,所以它的创建方式有点儿奇怪.创建格式如下: n ... 
随机推荐
- Eclipse CDT:  Shortcut to switch between .h and .cpp
			ctrl+ tab is the default shortcut.You can change it in Window → Preferences → General → Keys: Toggl ... 
- [原]CentOS7部署osm2pgsql
			转载请注明原作者(think8848)和出处(http://think8848.cnblogs.com) 部署Postgresql和部署PostGis请参考前两篇文章 本文主要参考GitHub上osm ... 
- [LeetCode] Find All Anagrams in a String 找出字符串中所有的变位词
			Given a string s and a non-empty string p, find all the start indices of p's anagrams in s. Strings ... 
- [LeetCode] Wiggle Sort 摆动排序
			Given an unsorted array nums, reorder it in-place such that nums[0] <= nums[1] >= nums[2] < ... 
- Chrome浏览器调试,console简述
			作为一个前端开发者,不可避免的需要进行各种各样的调试. 在谷歌浏览器出来以前,火狐的firebug是特别有名的一款调试工具,不过自从谷歌浏览器诞生以来,其自带的开发者工具足以媲美firebug,某种程 ... 
- AngularJS Scope(作用域)
			1. AngularJS Scope(作用域) Scope(作用域) 是应用在 HTML (视图) 和 JavaScript (控制器)之间的纽带. Scope 是一个对象,有可用的方法和属性. Sc ... 
- python基础补漏-01
			python对象的方法 1.python的特性:一切皆对象 2 type(obj) 查看对象的类型 3 dir(obj)查看类中所有详细的功能 4 help(obj) 查看类中所有详细的功能 类中的方 ... 
- delphi 取硬盘号
			function GetVolumeID: string; var vVolumeNameBuffer: ..] of Char; vVolumeSerialNumber: DWORD; vMaxim ... 
- Python Pandas分组聚合
			Pycharm 鼠标移动到函数上,CTRL+Q可以快速查看文档,CTR+P可以看基本的参数. apply(),applymap()和map() apply()和applymap()是DataFrame ... 
- python_java_selenium_ jenkins持续集成Firfox_chrome浏览器不显示的解决方法?
			python_java_selenium_ jenkins持续集成Firfox_chrome浏览器不显示的解决方法: 原因:因为jenkins是用windows installer 安装成 windo ... 
