Objective-c 数据类型
这里列出Objective-c中独有数据类型:
一、字符串
在Objective-c中,字符串常量是由@和一对从引号括起的字符串序列。比如:@"China"、@"objective-c"等都是合法的字符串常量。
二、id类型
id类型是Objective-c中一个比较独特类型。
在概念上、类似Java中的Object类,可以转换为任何数据类型。
换句话说,id类型的变量可以存放任何数据类型的对象。
在内部处理上,这种类型被定义为指向对象的指针,实际上是一个指向这种对象的实例变量的指针。
我们可以理解为id类型就是void*类型。但是它们两个并非完全一样。下面是id在objc.h中的定义:
- typedef struct objc_object {
- Class isa;
- }*id;
从上面看出,id是指向struct objc_object的一个指针。也就是说,id是一个指向任何一个继承了Ojbect(或者NSObject)类的对象。需要注意的是id是一个指针,所以在使用id的时候不需要加星号,比如:
id n=nil;
例如:
- id data;
- data = person;
- [data print];
- …
- data = person1;
- [data put];
- …
三、BOOL
在objc.h中,BOOL定义为:
- typedef signed char BOOL;
- #define YES (BOOL)1
- #define NO (BOOL)0
从上面的定义,我们可以发现布尔变量的值是YES和NO,或0和1.
如:
- BOOL enable=NO;
- enable=0;
- if(enable == YES) …
- if(enable) …
- if(!enable) …
它类似于C语言中的TRUE和FALSH.
四、SEL
在Objective-c中,SEL是选择器(selector)的一个类型。
选择器就是指向方法的一个指针。我们可以理解为程序运行到这里时就会执行指定的方法。
例如:
- SEL sel=@selector (print);
- ClassA *classA = [[ClassA alloc]init];
- ClassB *classB = [[ClassB alloc]init];
- [classA performSelector:sel withObject:nil];
- [classB performSelector:sel withObject:nil];
- SEL selA=@selector (print:);
- SEL selB=@selector (print:age:);
在上例中sel是指向print方法的指针,没有指定它是属于哪个类。因此,不同的类中都有print方法时可以调用上面的形式进行调用。
我们可以将SEL理解为函数指针,但它们之间并非完全一样。
五、Class
与Java类似,你可以使用Class类来获得一个对象所属的类。如:
Class theClass = [theObject class]; //获得theObject对象的class信息
NSLog(@"类名是:%s",[theClass className]); //theObject对象的类名
Class类有几个常用的方法,如判断某个对象是否为某个类(包含子类)的对象:
if( [theObject isKindOfClass:[Member class]]) {…}
如果不想包含子类,就可以使用:
nil与C语言的NULL相同。在objc/objc.h中定义如下:
#define nil 0 /* id of Nil instance */
Nil与nil有点不一样,Nil定义一个指向空的类(是Class,而不是对象)。具体定义如下:
#define Nil 0 /* id of Nil class */
如:
- ClassA *classA = [[ClassA alloc]init];
- classA = nil
- id data;
- data=nil;
版权声明:本文为博主原创文章,未经博主允许不得转载。
Objective-c 数据类型的更多相关文章
- Automake
Automake是用来根据Makefile.am生成Makefile.in的工具 标准Makefile目标 'make all' Build programs, libraries, document ...
- [转] 从 C 到 Objective C 入门1
转自: http://blog.liuhongwei.cn/iphone/objective-c/ 进军iPhone开发,最大的难点之一就是怪异的Objective C语法了.不过,了解之后才发现,原 ...
- Objective C笔记(第一天)
• OC语言概述 1.早在20世纪80年代早期,Bard Cox发明了Objective C, 是扩充的C,面向对象的编程语言. 2.NEXTSTEP简称NS a.1985年,Steve Jobs成⽴ ...
- iOS开发核心语言Objective C —— 全部知识点总结
本分享是面向有意向从事iOS开发的伙伴及苹果产品的发烧友,亦或是已经从事了iOS的开发人员,想进一步提升者.假设您对iOS开发有极高的兴趣,能够与我一起探讨iOS开发.一起学习,共同进步.假设您是零基 ...
- Objective-C面向对象-对象和类
文章都是先由本人个人博客:孙占兴:www.teilim.com,先更新,随后CSDN博客才会更新,掌握第一动态请关注本人主站. 原文链接:http://www.teilim.com/objective ...
- Objective - c Foundation 框架详解2
Objective - c Foundation 框架详解2 Collection Agency Cocoa provides a number of collection classes such ...
- OC基础--数据类型与表达式
前言 做iOS开发有3年了,从当初的小白到现在,断断续续看过很多资料,之前也写过一些博文来记录,但是感觉知识点都比较凌乱.所以最近准备抽时间把iOS开发的相关知识进行一个梳理,主要分为OC基础.UI控 ...
- JavaScript 中的数据类型
Javascript中的数据类型有以下几种情况: 基本类型:string,number,boolean 特殊类型:undefined,null 引用类型:Object,Function,Date,Ar ...
- JS 判断数据类型的三种方法
说到数据类型,我们先理一下JavaScript中常见的几种数据类型: 基本类型:string,number,boolean 特殊类型:undefined,null 引用类型:Object,Functi ...
- Python高手之路【二】python基本数据类型
一:数字 int int(整型): 在32位机器上,整数的位数为32位,取值范围为-2**31-2**31-1,即-2147483648-2147483647 在64位系统上,整数的位数为64位,取值 ...
随机推荐
- HDU2955-Robberies
描述: The aspiring Roy the Robber has seen a lot of American movies, and knows that the bad guys usual ...
- Unity3D Android手机开发环境配置
Unity3D Android手机开发环境配置 Date:2014-01-01 07:09 1.配置eclipse环境:首先在官网下载安装包:http://developer.android.com/ ...
- 利用 onload 事件监控跨站资源
用过 CSP 的都很郁闷,上报的只有违规的站点名,却没有具体路径.这是缺陷,还是特意的设计? 显然,CSP 是为安全定制的,里面的规范自然要严格制定,否则就会带来新的安全问题.如果支持详细路径的上报, ...
- hdu 4735Little Wish~ lyrical step~ 重复覆盖
题目链接 给出一棵树, 树上点的值为0或1, 可以交换树上两个点的权值, 给出一个距离m, 所有的0距离最近的1的距离不能超过m, 求最少的交换次数. 首先对于每一个点u,所有离u的距离不超过m的点v ...
- for循环例子1、2、3
/* Name:for循环例子1.2.3 Copyright: By.不懂网络 Author: Yangbin Date:2014年2月12日 02:12:41 Description:该代码用来熟悉 ...
- Vim 实用技术,第 2 部分: 常用插件(转)
http://blog.jobbole.com/20619/ 2.1. gzip(压缩文件支持) 作者:Bram Moolenar 网站脚本编号:无(包含在 Vim 的标准发布之中) 安装说明:无 功 ...
- Azure Traffic Manager 现可与 Azure 网站集成!
编辑人员注释:本文章由 WindowsAzure 网站团队高级专家级工程师 Jim Cheshire撰写. AzureTraffic Manager 已经推出有一段时间,这是一种跨多个区域管理网 ...
- Windows Azure 社区新闻综述(#73 版)
欢迎查看最新版本的每周综述,其中包含有关云计算和 Windows Azure的社区推动新闻.内容和对话. 以下是过去一周基于您的反馈汇集在一起的内容: 文章.视频和博客文章 · Windows A ...
- java类的结构(属性、方法、构造函数)
一.类的定义形式类定义的一般形式如下 [类定义修饰符] class <类名> { //类体 [成员变量声明] [构造函数] [成员方法] } 前面说过,在描述java语法时,方括号中 ...
- Android项目中包名的改动
通常改动包名时会造成R文件错误,而且有时带有原因不明的Manifest文件里多处文本混乱. 所以,将眼下觉得最为简洁方便的改动包名流程记录例如以下: 如果我们眼下的包名为com.pepper.util ...