这里列出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. BZOJ 2946: [Poi2000]公共串( 后缀自动机 )

    一个串建后缀自动机, 其他串在上面跑, 然后用当前串跑的去更新全部 ------------------------------------------------------------------ ...

  2. Java学习之利用集合发牌小练习

    /* * 思路: * A:创建一个HashMap集合 * B:创建一个ArrayList集合 * C:创建花色数组和点数数组 * D:从0开始往HashMap里面存储编号,并存储对应的牌同时往Arra ...

  3. Html页面操作json串

    System.Web.Script.Serialization.JavaScriptSerializer js = new System.Web.Script.Serialization.JavaSc ...

  4. jquery不限图片焦点图

    <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/ ...

  5. ExtJS 修改load paging时的参数

    ExtJS 的pagingToolbar 在翻页的时候传入的参数是固定的  分别是start 和 limit(其中limit的值就是store.pageSize的值) 如何在每次翻页的时候传入自己的参 ...

  6. MySQL show binglog event in 'log_name'

    二进制日志文件记录的内容:记录表的更改. 二进制日志文件记录的形式:基于语句的复制.基于行的复制. 两种记录形式的优点与不足: 基于语句的复制-->它不能保证复制的正确性.如随机函数可能在两台机 ...

  7. QPointer很大程度上避免了野指针(使用if语句判断即可,类似于dynamic_cast),而且使用非常方便 good

    QPointer 如何翻译呢?我不太清楚,保留英文吧. The QPointer class is a template class that provides guarded pointers    ...

  8. UVA 11475 Extend to Palindrome(后缀数组+ST表)

    [题目链接] http://acm.hust.edu.cn/vjudge/problem/27647 [题目大意] 给出一个字符串,要求在其后面添加最少的字符数,使得其成为一个回文串.并输出这个回文串 ...

  9. java的数学函数总结

    java的数学函数都放在java.lang这个包中,并且这些函数的方法在类Math中是作为static方法出现的,所以要引用一个特定的函数,只需将类Math和一个圆点写在要使用的方法前就好.如方法sq ...

  10. iOS开发笔记 基于wsdl2objc调用asp.net WebService

    1.准备 先下载待会要用到的工具 WSDL2ObjC-0.6.zip WSDL2ObjC-0.7-pre1.zip 我用的是WSDL2ObjC-0.6.zip 1.1搭建asp.net WebServ ...