- 浏览: 227055 次
- 性别:
- 来自: 广州
文章分类
- 全部博客 (109)
- IOS (15)
- 设计模式 (7)
- XML (1)
- Android (31)
- 面试经 (1)
- J2EE (3)
- android md5 加密 (2)
- android imagebutton文字实现 (1)
- 反射机制 (2)
- 基础知识 (1)
- linux (3)
- java (4)
- java基础 (2)
- 文章 (1)
- myeclipse tomcat (1)
- Hadoop (1)
- ubuntu (2)
- redmine (1)
- python (4)
- jmeter (10)
- xamarin (1)
- selenium (9)
- nexus (1)
- appium (3)
- BDD (1)
- apache2 (1)
- zabbix (2)
- python,webdriver (1)
- ajax (1)
- jmeter,正则表达式,关联 (2)
- 性能测试工具 (1)
- Django (0)
- Intelij (1)
- RAP (0)
- 性能测试 (0)
最新评论
Object-C 中的Selector 概念
Andrew Huang <bluedrum@163.com> 转载请注明作者和联络方式
在iphone程序中会大量看到@selector这样的用法。<<iphone开发基础>花了很大一个篇幅来解析这个语法,但是不知是翻译问题,还是解释过细,不大看得懂,很是不给力.直到程序用这个语法,并且仔细看了一些解析文章。才明白这一语法。
简而言之,你可以理解 @selector()就是取类方法的编号,他的行为基本可以等同C语言的中函数指针,只不过C语言中,可以把函数名直接赋给一个函数指针,而Object-C的类不能直接应用函数指针,这样只能做一个@selector语法来取.
它的结果是一个SEL类型。这个类型本质是类方法的编号(函数地址)?因此我们有如下代码。
一.取得selector值.
C函数指针
int add(int val)
{
return val+1;
}
int (* c_func)(int val); //定义一个函数指针变量
c_func = add ; //把函数addr地址直接赋给c_func
object-c的选择器,
@interface foo
-(int)add:int val;
@end
SEL class_func ; //定义一个类方法指针
class_func = @selector(add:int) ;
注意1. @selector是查找当前类的方法,而[object @selector(方法名:方法参数..) ] ;是取object对应类的相庆方法.
注意2.查找类方法时,除了方法名,方法参数也查询条件之一.
注意3. 可以用字符串来找方法 SEL 变量名 = NSSelectorFromString(方法名字的字符串);
注意4. 可以运行中用SEL变量反向查出方法名字字符串
NSString *变量名 = NSStringFromSelector(SEL参数);
二.执行selector值.
取得相庆值后,怎么处理SEL值呢,这一点仍然与函数指针一样,就是执行它
函数指针执行,(以下有几种等效形式)
*c_func(10);
c_func(10);
SEL变量的执行.用performSelecor方法来执行.
[对象 performSelector:SEL变量 withObject:参数1 withObject:参数2];
三.selector的应用场合
selector本质是跟C的回调函数一样。主要用于两个对象之间进行松耦合的通讯.这种方法很多开发环境用到。比如GTK,Delphi.基本上整个Cocoa库之间对象,控制之间通讯都是在这个基础构建的。
Andrew Huang <bluedrum@163.com> 转载请注明作者和联络方式
在iphone程序中会大量看到@selector这样的用法。<<iphone开发基础>花了很大一个篇幅来解析这个语法,但是不知是翻译问题,还是解释过细,不大看得懂,很是不给力.直到程序用这个语法,并且仔细看了一些解析文章。才明白这一语法。
简而言之,你可以理解 @selector()就是取类方法的编号,他的行为基本可以等同C语言的中函数指针,只不过C语言中,可以把函数名直接赋给一个函数指针,而Object-C的类不能直接应用函数指针,这样只能做一个@selector语法来取.
它的结果是一个SEL类型。这个类型本质是类方法的编号(函数地址)?因此我们有如下代码。
一.取得selector值.
C函数指针
int add(int val)
{
return val+1;
}
int (* c_func)(int val); //定义一个函数指针变量
c_func = add ; //把函数addr地址直接赋给c_func
object-c的选择器,
@interface foo
-(int)add:int val;
@end
SEL class_func ; //定义一个类方法指针
class_func = @selector(add:int) ;
注意1. @selector是查找当前类的方法,而[object @selector(方法名:方法参数..) ] ;是取object对应类的相庆方法.
注意2.查找类方法时,除了方法名,方法参数也查询条件之一.
注意3. 可以用字符串来找方法 SEL 变量名 = NSSelectorFromString(方法名字的字符串);
注意4. 可以运行中用SEL变量反向查出方法名字字符串
NSString *变量名 = NSStringFromSelector(SEL参数);
二.执行selector值.
取得相庆值后,怎么处理SEL值呢,这一点仍然与函数指针一样,就是执行它
函数指针执行,(以下有几种等效形式)
*c_func(10);
c_func(10);
SEL变量的执行.用performSelecor方法来执行.
[对象 performSelector:SEL变量 withObject:参数1 withObject:参数2];
三.selector的应用场合
selector本质是跟C的回调函数一样。主要用于两个对象之间进行松耦合的通讯.这种方法很多开发环境用到。比如GTK,Delphi.基本上整个Cocoa库之间对象,控制之间通讯都是在这个基础构建的。
发表评论
-
appStore上传苹果应用程序软件发布流程
2012-10-31 09:51 18641.进入开发者中心,进 ... -
iPhone的App的目录结构
2012-10-31 09:57 981iPhone的App的目录结构如下: 对于一个运 ... -
iPhone开发经典语录集锦
2012-10-30 00:50 904如果大家和我一样有感触的话,可以跟在帖子下面,最好简短并附上 ... -
ASIHTTPRequest 详解
2012-10-31 09:57 1024目录 目录 发起一个同步请求 创建一个异步请求 队列请 ... -
【引用】iPhone的App的目录 【引用】iPhone-国际化Iphon
2012-11-04 21:30 946博主:易飞扬 原文链接 : http://www.yifei ... -
iphone开发之 - 启动页面设置
2012-10-31 09:58 1222不管是开发个人项目还是公司项目,大家通常都有一个需求,就 ... -
限制UITextField输入长度的方法
2013-01-26 23:04 888在 iPhone 应用里经常要限制用户输入字符的长度,比如密 ... -
【引用】iphone开发的好网站
2012-10-20 02:29 2783分享iphone开发的好网站,希望大家也能提供一些分享下 ... -
IOS开源项目汇总
2013-01-26 23:05 1460前几天看到一位会员,总结了一些开源的IOS项目,我结合自己开发 ... -
Xcode SVN配置
2012-10-19 00:14 1057Xcode SVN配置 编辑 ~/.subversion/co ... -
Iphone 图片
2012-10-13 00:08 1136如何自定义分组表视图/边框颜色的背景您需要设置UITableV ... -
iphone定位 基本知识
2012-10-04 23:54 867找到一个关于iphone定位 ... -
object c 中 retain 和copy的区别
2012-10-04 23:49 955原来简单解释过属性定义(Property) ,并且提起了简单 ... -
objective-c中property的属性
2012-10-04 23:44 942[size=large][/size][color=blue] ...
相关推荐
**Object-C基础教程** ...通过阅读提供的"Object-C" PDF教程,你将逐步了解并掌握这些概念,从而为开发iOS或macOS应用打下坚实基础。在实践中不断探索和学习,你将能更好地驾驭Object-C这一强大语言。
下面我们将深入探讨EventBus的基本概念、Object-C版本的特点以及如何在iOS应用中使用它。 **EventBus基本概念:** EventBus 是一种设计模式,灵感来源于发布/订阅模式,用于简化应用程序内部组件之间的通信。它通过...
在这个项目中,"ObjCTest" 可能是一个包含多个源代码文件的目录,这些文件涵盖了 Objective-C 的各种概念和技术,如类、对象、继承、封装、多态性以及方法调用等。 1. **类与对象**:Objective-C 中的一切皆为对象...
Object-C,全称Objective-C,是一种基于C语言的、面向对象的编程语言,由Stepanov和Moss在1983年为NextStep操作系统开发。苹果公司广泛使用Objective-C作为其iOS和macOS操作系统以及相关框架如Foundation和AppKit的...
Objective-C的核心概念之一就是类和对象。类定义了对象的属性和行为。在Objective-C中,类的定义通常包括两个部分:接口(interface)和实现(implementation)。 - **接口**: 描述类的公共接口,包括属性和方法的声明...
Objective-C(Object-C)是苹果公司开发的一种面向对象的编程语言,主要应用于iOS和Mac OS X操作系统。它是C语言的超集,包含了Smalltalk风格的消息传递机制,因此它具有C语言的底层控制能力和Smalltalk的灵活性。在...
- **Selector**:选择器是Objective-C中表示方法的标识符,用于消息发送。 - **Dynamic Dispatch**:动态调度使得可以在运行时决定执行哪个方法。 - **Method Swizzling**:方法交换是一种运行时技术,可修改方法的...
例如,`[anObject performSelector:@selector(aMethod)]`。 4. **@interface 和 @implementation**: `@interface` 用于声明类,包含属性(properties)和方法(methods)。`@implementation` 部分实现接口中的声明...
本节将深入探讨Object-C的核心概念、语法特点以及在实际应用中的使用技巧。 一、基础概念 1. 类(Class):在Object-C中,类是对象的蓝图,定义了一组属性(实例变量)和方法(消息)。每个对象都是某个类的实例。...
Object-C,全称Objective-C,是一种基于C语言的面向对象编程语言,主要用于Apple的iOS和macOS平台上的应用开发。它是Apple的Foundation和AppKit框架的基础,是开发iPhone、iPad以及Mac应用程序的核心语言。本教程将...
作为初学者,理解Object-C的基本概念和技术是迈向iPhone开发的第一步。本教程旨在帮助你深入理解Object-C的核心概念,并提供源码以供实践。 **一、Objective-C基础** 1. **消息传递机制**:Objective-C中的对象...
从C++到Object-C的知识点涵盖了面向对象编程语言的迁移与适应,特别是对于那些有C++背景的程序员来说,理解Objective-C语言的特点、语法和编程范式是至关重要的。接下来将详细阐述这些知识点: 1. Objective-C语言...
Objective-C使用点语法`.`来发送消息,如`[object method]`。这种语法使得代码更易读,但也体现了Obj-C的动态性。消息可以动态解析,使得运行时可以决定执行哪个方法。 **4. 继承与多态** Objective-C支持单一继承...
Objective-C(Object-C)是Apple开发的一种面向对象的编程语言,它是C语言的超集,主要用于iOS和Mac OS X操作系统上的应用开发。由于其在Apple生态系统中的重要地位,学习Objective-C成为了想要深入iOS开发的...
Objective-C允许在代码中混合使用C语言的结构和面向对象的特性。这意味着可以在Objective-C程序中直接使用C的库和函数,这为开发提供了极大的灵活性。 #### 3.4 新类型与值 Objective-C引入了新的数据类型和值,...
在深入探讨Object-C的消息机制之前,首先我们要理解的是,Objective-C是一种基于Smalltalk的动态面向对象编程语言,它是在C语言的基础上添加了面向对象的概念。与C++或Java等静态类型语言不同,Objective-C的方法...
- **与C兼容**:由于它是C语言的扩展,因此可以直接在Objective-C程序中混合使用C代码。 - **动态消息传递**:Objective-C采用动态消息传递机制,这意味着当一个方法被调用时,实际上是向对象发送一条消息。 - **...
这个语言是C语言的超集,因此它保留了C的语法结构,同时引入了类和消息传递等面向对象的特性。Objective-C的类定义使用@interface关键字,实例变量用@property声明,方法用-(返回类型)方法名:(参数类型)参数名形式...
例如,`[anObject performSelector:@selector(aMethod)]`就是在向`anObject`发送`aMethod`的消息。 4. **协议(Protocols)**:Objective-C的协议类似于Java和C#的接口,定义了一组方法签名,但不提供具体实现。...