这里列出Objective-c中独有数据类型:

一、字符串

在Objective-c中,字符串常量是由@和一对从引号括起的字符串序列。比如:@"China"、@"objective-c"等都是合法的字符串常量。

二、id类型
    id类型是Objective-c中一个比较独特类型。
    在概念上、类似Java中的Object类,可以转换为任何数据类型。
    换句话说,id类型的变量可以存放任何数据类型的对象。
    在内部处理上,这种类型被定义为指向对象的指针,实际上是一个指向这种对象的实例变量的指针。

我们可以理解为id类型就是void*类型。但是它们两个并非完全一样。下面是id在objc.h中的定义:

  1. typedef struct objc_object {
  2. Class isa;
  3. }*id;

从上面看出,id是指向struct objc_object的一个指针。也就是说,id是一个指向任何一个继承了Ojbect(或者NSObject)类的对象。需要注意的是id是一个指针,所以在使用id的时候不需要加星号,比如:

id n=nil;

例如:

  1. id data;
  2. data = person;
  3. [data print];
  4. data = person1;
  5. [data put];

三、BOOL

在objc.h中,BOOL定义为:

  1. typedef signed char BOOL;
  2. #define YES   (BOOL)1
  3. #define NO    (BOOL)0

从上面的定义,我们可以发现布尔变量的值是YES和NO,或0和1.

如:

  1. BOOL enable=NO;
  2. enable=0;
  3. if(enable == YES) …
  4. if(enable) …
  5. if(!enable) …

它类似于C语言中的TRUE和FALSH.

四、SEL
    在Objective-c中,SEL是选择器(selector)的一个类型。
    选择器就是指向方法的一个指针。我们可以理解为程序运行到这里时就会执行指定的方法。

例如:

  1. SEL sel=@selector (print);
  2. ClassA *classA = [[ClassA alloc]init];
  3. ClassB *classB = [[ClassB alloc]init];
  4. [classA performSelector:sel withObject:nil];
  5. [classB performSelector:sel withObject:nil];
  6. SEL selA=@selector (print:);
  7. 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 */

如:

  1. ClassA *classA = [[ClassA alloc]init];
  2. classA = nil
  3. id data;
  4. data=nil;

版权声明:本文为博主原创文章,未经博主允许不得转载。

Objective-c 数据类型的更多相关文章

  1. Automake

    Automake是用来根据Makefile.am生成Makefile.in的工具 标准Makefile目标 'make all' Build programs, libraries, document ...

  2. [转] 从 C 到 Objective C 入门1

    转自: http://blog.liuhongwei.cn/iphone/objective-c/ 进军iPhone开发,最大的难点之一就是怪异的Objective C语法了.不过,了解之后才发现,原 ...

  3. Objective C笔记(第一天)

    • OC语言概述 1.早在20世纪80年代早期,Bard Cox发明了Objective C, 是扩充的C,面向对象的编程语言. 2.NEXTSTEP简称NS a.1985年,Steve Jobs成⽴ ...

  4. iOS开发核心语言Objective C —— 全部知识点总结

    本分享是面向有意向从事iOS开发的伙伴及苹果产品的发烧友,亦或是已经从事了iOS的开发人员,想进一步提升者.假设您对iOS开发有极高的兴趣,能够与我一起探讨iOS开发.一起学习,共同进步.假设您是零基 ...

  5. Objective-C面向对象-对象和类

    文章都是先由本人个人博客:孙占兴:www.teilim.com,先更新,随后CSDN博客才会更新,掌握第一动态请关注本人主站. 原文链接:http://www.teilim.com/objective ...

  6. Objective - c Foundation 框架详解2

    Objective - c  Foundation 框架详解2 Collection Agency Cocoa provides a number of collection classes such ...

  7. OC基础--数据类型与表达式

    前言 做iOS开发有3年了,从当初的小白到现在,断断续续看过很多资料,之前也写过一些博文来记录,但是感觉知识点都比较凌乱.所以最近准备抽时间把iOS开发的相关知识进行一个梳理,主要分为OC基础.UI控 ...

  8. JavaScript 中的数据类型

    Javascript中的数据类型有以下几种情况: 基本类型:string,number,boolean 特殊类型:undefined,null 引用类型:Object,Function,Date,Ar ...

  9. JS 判断数据类型的三种方法

    说到数据类型,我们先理一下JavaScript中常见的几种数据类型: 基本类型:string,number,boolean 特殊类型:undefined,null 引用类型:Object,Functi ...

  10. Python高手之路【二】python基本数据类型

    一:数字 int int(整型): 在32位机器上,整数的位数为32位,取值范围为-2**31-2**31-1,即-2147483648-2147483647 在64位系统上,整数的位数为64位,取值 ...

随机推荐

  1. linux杂记(五)正确关机方法(shutdown,reboot,init,halt)

    前言:由于在linux底下,每个程序(或者说是服务)都是在背景下运行的,因此,在你看不到的屏幕背后其实可能有相当多人同时在你的主机上面工作,如果 你直接按下电源开关来关机,则可能导致其他人的数据就此中 ...

  2. Visual Studio 2013使用SASS和Compass--SASS和Compass安装

    你需要安装ruby 你需要安装SASS/Compass 安装sass,在命令行中输入: $ gem install sass 你可能会问gem是什么?gem是ruby的包管理器.包的概念呢,就是一个为 ...

  3. hdu 4493 Tutor

    题目:http://acm.hdu.edu.cn/showproblem.php?pid=4493 给你十二个月的工资,算平均数,保留两位,去除末尾的0 使用暴力解决,嘻嘻,但是这题主要是在进位这个地 ...

  4. nyoj 138 找球号(二)(哈希)

    题目:nyoj——138 /*** 哈希求解...采用链表保存 插入时,可以去除重复 查找 找到该组,然后在改组的查找 当这个组不存在时或是没有找到时是 NO 其他是YES 1e6+1 时间最短 */ ...

  5. JDK的目录结构及结构图

    -bin目录: JDK开发工具的可执行文件 -lib目录: 开发工具使用的归档包文件 -jre: Java 运行时环境的根目录,包含Java虚拟机,运行时的类包和Java应用启动器,         ...

  6. DNS解析

    大家好,今天51开源给大家介绍一个在配置文件,那就是/etc/resolv.conf.很多网友对此文件的用处不太了解.其实并不复杂,它是DNS客户机配置文件,用于设置DNS服务器的IP地址及DNS域名 ...

  7. 《火球——UML大战需求分析》(0.2)——目录

    说明: <火球——UML大战需求分析>是我撰写的一本关于需求分析及UML方面的书,我将会在CSDN上为大家分享前面几章的内容,总字数在几万以上,图片有数十张.欢迎你按文章的序号顺序阅读,谢 ...

  8. [转] 使用SQL脚本查看表空间使用率和使用dba_tablespace_usage_metrics视图的差别

    传统的SQL脚本查看表空间使用率,使用的关键视DBA_DATA_FILE和DBA_FREE_SPACE. Oracle 11g引入了DBA_TABLESPACE_USAGE_METRICS视图.其实, ...

  9. c/c++测试程序运行时间

    算法分析中需要对各种算法进行性能测试,下面介绍两种通用的测试方法,由于只用到标准c语言函数,所以在各种平台和编译器下都能使用. 方法1: clock()函数 开始计时:start = clock() ...

  10. WebSite 文件上传Demo

    知识点: 1 <!--上传文件时:        1.必须使用Post方式来提交数据        2.必须设置表单的enctype属性        3.必须在表单中包含文件域.input t ...