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位,取值 ...
随机推荐
- VirtualBox 更改主机和虚拟机之间的鼠标切换热键
VirtualBox 主机和虚拟机之间的鼠标切换热键 是 Right Ctrl.一般用惯VM Ware的都不太习惯,那么怎么改变VirtualBox鼠标切换热键呢? 1.点击菜单栏的 管理--&g ...
- Oracle 游标Cursor 的基本用法
查询 SELECT语句用于从数据库中查询数据,当在PL/SQL中使用SELECT语句时,要与INTO子句一起使用,查询的 返回值被赋予INTO子句中的变量,变量的声明是在DELCARE中.SELECT ...
- 贴片陶瓷电容的NPO、C0G、X7R、X5R、Y5V、Z5U辨析
NPO与X7R.X5R.Y5V.Z5U神马的有啥区别?主要是介质材料不同.不同介质种类由于它的主要极化类型不一样,其对电场变化的响应速度和极化率亦不一样. 在相同的体积下的容量就不同,随之带来的电容器 ...
- 在python中编写socket服务端模块(二):使用poll或epoll
在linux上编写socket服务端程序一般可以用select.poll.epoll三种方式,本文主要介绍使用poll和epoll编写socket服务端模块. 使用poll方式的服务器端程序代码: i ...
- HDU 5769 Substring(后缀数组)
[题目链接] http://acm.hdu.edu.cn/showproblem.php?pid=5769 [题目大意] 在一个串中求出包含字母的子串个数, 只要存在一个字符不相等的子串即可视为不同的 ...
- [spring+springmvc+mybatis实践]学生社团管理系统
一.简介 ssm框架为现在十分流行的mvc主流框架.mybatis负责与数据库交互,springmvc与spring完美适配,负责控制器和视图渲染.之前有初步学习过ssm框架,这次借学校里的web课设 ...
- display:table标签来自动改变列宽 改变的同时table的整体宽度跟随变化
发现公司里的所有分页功能都是通过display:talbe来实现的,但是用户最近说要让表格列宽可以拖动:所有我就寻找了好多的办法:网上找了很多的资料,但是都不是我要的效果因为他们都是列宽不改变要不就是 ...
- addEventlistener监听的事件完成一次后自动取消与jquery的one方法比较;animate动画制作,arguments.callee的用法
<!doctype html> <html lang="en"> <head> <meta charset="UTF-8&quo ...
- geometry(简单数学题)
geometry Accepts: 324 Submissions: 622 Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 6553 ...
- zoj 1083 Frame Stacking
其实就是一个拓补排序.(动态记录第i个之上的j存不存在,反过来就是第j个之下的i) 首先确立每个框的位置(题目明确说了每一边都不会被完全覆盖)./*可以通过搜索,搜索到该框的所有四个角*/||如果题目 ...