标签:

数据类型

1.Objective-C数据类型可以分为:基本数据类型、对象数据类型和id类型。

2.基本数据类型有:int、float、double和char类型。

3.对象类型就是类或协议所声明的指针类型,例如:

NSAutoreleasePool *pool ,其中,NSAutoreleasePool是一个类,NSAutoreleasePool *是它指针类型或叫对象类型。

4.id类型可以表示任何类型,一般只是表示对象类型,不表示基本数据类型,所以刚才的变量可以声明pool也可以声明为id pool。

基本数据类型——int类型

int类型代表整数,它的十六进制表示方式:OxFFED0D.

在使用NSLog函数中格式化字符串使用%i表示十进制的整数,%o(字母o)表示8进制整数,%#x表示十六进制整数,它的取值范围是与设备相关的,无法一概而论。

基本数据类型——float类型

1.float类型表示代表双精度浮点数,与float类型很相似,可以在数值后面加上f或者F,例如:13.5f。float浮点数也可以用科学计数法表示,例如:1.7e4。

2.NSLog函数中格式化字符串:%f表示浮点数(会保留后面6位小数),%e表示科学计数法,%g表示浮点数。

基本数据类型——double类型

1.double类型代表双精度浮点数,与float数相似,占用的字节空间double类型大体上是float类型的两倍。大多数计算机是使用64位,表示double类型。

2.NSLog函数中格式化字符串,与float的%f、%e和%g相同。

基本数据类型——char类型(在计算机内部以int类型存储)

1.char类型代表字符类型,存放点个字符,用单引号引用起来。如:’A’,如果要表示一些特殊字符,要使用转义字符“\”。

2.NSLog函数中格式化字符串:%c。

数据类型限定词:老外写的好有这些东西。

Objective-C中数据类型可以在int、float和double、char类型前面加上限定词,限定词有:long、longlong、short、unsigned和signed,这些限定词从而增强了基本类型。

long int:在大部分计算机中代表32位整数,在整数后面加L(或l)表示,如:long int numberOfPoints = 1310L.NSLog函数中格式化字符串使用%li表示。

long long int:可以指定更加宽泛的整数类型,保证变量至少64位宽度。NSLog函数中格式化字符串使用%lli表示。

long double:可以指定更为宽泛的double类型,要显示这个可以在尾部使用L(大小写)表示,1.23+7L.NSLog函数中格式化字符串使用%Lf、%Le和%Lg表示。

short int:用来指定存放相对小得整数,一般式占用int类型的一半。大部分计算机是16位。

unsigned int(无符号整数):告诉编译器只是接受整数,在数值之后存放字母u(或U)表示,例如:0x00ffU;在编写整数的时候,可以将字母u(或U)和l(或L)组合起来,例如:100UL.

signed char(char在计算机中存的也是整数,所以有符号和无符号之分。):代表的字符和编译器有关,一般也作为无符号整数使用。

布尔类型(在计算机内部以int类型存储)

布尔类型是_Bool(别名BOOL),取值范围是1或0,其中1可以用TURE和YES表示,0可以用FALSE和NO表示。

枚举类型(在计算机内部以int类型存储)

如果需要定义一组相关常量,可以采用枚举类型,把这些常量定义成一个类型,例如游戏在上、下、左、右方向,可以枚举类型:enum direction{up,down,left,right}.其中,up从0开始,down是1,以此类推加1。如果不想从0开始,也可以指定初始值,如:enum direction{up=1,down,left,right}。

数据类型转换

1.谈到数据类型,就必然有数据类型转换的特点。

2.按照数据类型占用存储不同可以自动类型转换或强制类型转换,总的原则是小存储容量类型可以自动转换成大存储容量数据类型。

3.不同类型数据间按照下面关系的从左到右(从低到高)自动转换。如下:

_Bool、char、short int、枚举类型——>int——>long int——>long long int

——>float——>double——>long double.

4.类型转换先后顺序表

5.强制类型转换

如果遵守类型转换是右到左情况,就需要强制类型转换了。强制类型转换语法形式上很简单,就是在数据前面加上(目标类型),但是这种转换是存在风险的,有可能造成数据的丢失,需要谨慎进行。

//———————————————SEL—————————————————//

SEL就是对方法的一种包装。

1.方法的存储位置

@interface Person:NSObject

+ (void)test1;

-    (void )test2;

@end

Person *person = [[Person alloc]init];

在内存中如下:

在内存中每个类的方法都存储在类对象中,

每个方法都有一个与之对应的SEL类型的数据,

根据一个SEL数据就可以找到对应的方法地址,进而调用方法。

SEL类型的定义:typedef struct objc_selector *SEL.

*************************

SEL对象的创建

SEL s1  = @selector(test1);

SEL s2 = NSSelectorFromString(@“test1”)

************************

1.SEL类型是OC中用来定义方法的关键字,和其他语言不同的是SEL类型虽然是方法定义,但却不从属于任何类实例,其值是通过@selector进行计算,可以把它当做一个函数指针来使用,当然它实际上并不是一个函数指针,而是const char*。

2.SEL类型可以在编译时通过@selector()直接创建,也可以用NSSelectorString()函数创建,这个函数允许你通过名字调用方法。例如:

[object performSelector:@selector(doSomething)]];

它和如下代码等价:[object doSomething];

3.各种语言都有传递函数的方法:C语言使用函数指针,C++中有函数引用,OC使用选择器selector和block。由于iOS SDK 中的大部分API都是selector的方式,所以

 

//———————————————nil、NULL、NSNull—————————————————//

1.nil用来给对象赋值(OC的任何对象都属于id类型),Null则给任何指针赋值,NULL和nil不能互换,nil用于类指针赋值(在OC中类是一个对象,是类的meta-class的实例),而NSNull则用于集合操作,虽然它们表示的都是空值,但使用场合不同。

2.OC有个特性,就是当发送消息给nil对象使,系统返回0值而不是引起异常,这和Java的NullPointerException以及C/C++的程序直接崩溃的处理完全不同,因为nil是对象的合法值,nil对象同样可以接收消息。

3.nil被定义为空对象,也就是值为0的对象。

//———————————————id—————————————————//

1.在OC中最普遍的3种类型就是id、Class和SEL, id就是指向OC对象的指针,它等价于C语言中的void *,可以映射任何对象指针类型指向它,或者映射它指向其他的对象。当然,也可以传递任何消息给id,但如果该id不支持这个消息就会返回一个运行时异常。

2.id数据类型可存储任何类型的对象。从某种意义上说,它是一般对象类型。如果要用基本类型代替,需要对基本数据类型进行封装。

3.id是一个指向任何一个继承了Object(或者NSObject)类的对象。需要注意的是,id

是一个指针,所以在使用id的时候不需要加星号。例如:

id foo = nil;

4.在OC中,id取代了int类型成为默认的数据类型(在C语言上的函数返回值,int是默认的返回类型)。

//———————————————Bool—————————————————//

1.在OC中的布尔类型是BOOL,其值可以是YES或NO,也可以赋值为TRUE和FALSE。YES和TRUE等价,都是非零值;NO和FALSE等价,都是零值。

2.在调试的时候可以通过打印数字的方式(格式为%d)输出其值,代码如下:

BOOL loginResult = YES;

NSLog(@"LoginResult is %d",loginResult);

3.布尔变量的值为YES/NO或1/0.YES和1代表真。

//———————————————结构体—————————————————//

1.C语言本身提供的数据类型很少,那么C语言是如何构造复杂的数据类型呢?有三种方法:结构体、指针、数组。

2.结构体和指针在iOS编程是至关重要的,在OC中很少需要C的数组,因为OC有它自己的NSArray类型。

3.C的结构体是一个混合数据类型,在这个类型中包含了多种数据类型(也可以是另一个结构体),它能够作为单个的实体被传递。其中的元素通过点符号来访问。例如:

一个CGPoint定义如下:

struct CGRect{

CGRect x;

CGRect y;

};

typedef struct CGPoint

iOS数据类型

标签:

iOS 数据类型的更多相关文章

  1. IOS数据类型

    id – 动态对象类型.动态类型和静态类型对象的否定词汇为 nil. Class – 动态类的类型.它的否定词汇为 Nil.SEL – 选择器的数据类型(typedef):这种数据类型代表运行时的一种 ...

  2. iOS有哪些数据类型/基本数据类型?

    简述 本文主要探究使用OC作为iOS开发语言时,我们能使用哪些数据类型. 一切类型始于C. C语言的类型 基本数据类型: 基本数据类型(fundamental data types)也叫原始数据类型( ...

  3. iOS开发-javaScript交互

    前言 当前混合开发模式迎来了前所未有的发展,跨平台开发.热更新等优点决定了这种模式的重要地位.虽然前端界面在交互.动效等多方面距离原生应用还有差距,但毫无疑问混合开发只会被越来越多的公司接受.在iOS ...

  4. 【原】iOS开发进阶(唐巧)读书笔记(二)

    第三部分:iOS开发底层原理 1.Objective-C对象模型 1.1 isa指针 NSObject.h部分代码: NS_ROOT_CLASS @interface NSObject <NSO ...

  5. iOS阶段学习第二天笔记(数据类型与进制)

    iOS学习(C语言)知识点整理笔记 1.C语言32个关键字 一.存储相关 1)auto 声明自动变量 2)register 声明寄存器变量 3)volatile 声明的变量在程序执行过程中可能被隐含的 ...

  6. iOS开发Swift篇—(三)字符串和数据类型

    iOS开发Swift篇—(三)字符串和数据类型 一.字符串 字符串是String类型的数据,用双引号""包住文字内容  let website = "http://www ...

  7. ios中常用数据类型相互转换

    ios中常用数据类型相互转换 //1. NSMutableArray和NSArray互转 // NSArray转为NSMutableArray NSMutableArray *arrM = [arr ...

  8. iOS NSDictionary、NSData、JSON数据类型相互转换

    iOS经常需要用到数据类型的转换,下面列举一下常用类型的转换. 1.NSDictionary类型转换为NSData类型: //NSDictionary -> NSData: NSDictiona ...

  9. iOS Foundation 框架概述文档:常量、数据类型、框架、函数、公布声明

    iOS Foundation 框架概述文档:常量.数据类型.框架.函数.公布声明 太阳火神的漂亮人生 (http://blog.csdn.net/opengl_es) 本文遵循"署名-非商业 ...

随机推荐

  1. MATLAB / Simulink on BeagleBone Black

    转自:beagleboard@googlegroups.com邮件组 作者:kevind I have MATLAB / Simulink working with BeagleBone Black. ...

  2. 一个考察for循环题 讨论一下

    一道Java程序题,主要是考察for循环如下所示: public class Test { static boolean fun(char c) { System.out.print(c); retu ...

  3. Codevs No.1281 Xn数列

    2016-06-01 16:28:25 题目链接: Xn数列 (Codevs No.1281) 题目大意: 给定一种递推式为 Xn=(A*Xn-1+C)%M 的数列,求特定的某一项%G 解法: 矩阵乘 ...

  4. rsync 无密码传输文件

    最近机器迁移,需要备份文件,但各个机器间不能穿梭,即无法通过scp来传输文件, 在运维的建议下,选用了rsync作为传输的工具. 默认情况Ubuntu安装了rsync服务,但在/etc下没有配置文件, ...

  5. Android系统中Parcelable和Serializable的区别

    转载:https://greenrobot.me/devpost/android-parcelable-serializable/ 进行Android开发的时候,我们都知道不能将对象的引用传给Acti ...

  6. Spring MVC Framework 实例

    一 SpringMVC基础入门,创建一个HelloWorld程序 1 首先,导入SpringMVC需要的jar包. commons-logging-<version>.jar spring ...

  7. 在WinForm中使用Web Service来实现软件自动升级

    来源:互联网 winform程序相对web程序而言,功能更强大编程更方便,但软件更新却相当麻烦,要到客户端一台一台地升级,面对这个实际问题,在最近的一个小项目中,本人设计了一个通过软件实现自动升级技术 ...

  8. Spring MVC 的视图转发

    Spring MVC 默认采用的是转发来定位视图,如果要使用重定向,可以如下操作 1.使用RedirectView public ModelAndView login(){ RedirectView ...

  9. DNS添加/修改/查询/删除A记录

    #查询DNS可用类 Get-WmiObject -Namespace root\MicrosoftDNS -List #查询所有资源记录 $mydns = [WMIClass]"ROOT\M ...

  10. 如何用boost::serialization去序列化派生模板类(续)

    在 如何用boost::serialization去序列化派生模板类这篇文章中,介绍了序列化派生类模板类, 在写測试用例时一直出现编译错误,调了非常久也没跳出来,今天偶然试了一下...竟然调了出来. ...