【IOS 开发】Objective - C 入门 之 数据类型详解(一)

简介: 【IOS 开发】Objective - C 入门 之 数据类型详解(一)

1. 数据类型简介及输出



(1) 数据类型简介


数据类型简介 : Object - C 数据类型 分为 基本数据类型, 构造类型 和 指针类型;


-- 基本数据类型 : 整型, 字符型, 浮点型 (float 和 double), 枚举型;


-- 构造类型 : 数组类型, 结构体类型, 共用体类型;


-- 指针类型 : 最终要的数据类型, 所有的系统类, 自定义类都是指针;


-- 空类型 : 空类型只有一个值 nil, 该类型没有名称, 因此没有空类型的变量, 变量不能转换成空类型, 但是空类型可以转换成任何引用类型;




(2) 数据类型输出


NSLog()简介 : NSLog 是 Foundation 框架中功能强大的函数, 可以输出任何类型的数据;


-- 占位符 : NSLog() 函数中各式与 C 语言中大致相似, 第一个参数是加了 @ 的字符串, 后面的参数是用于替换占位符的;



整型占位符说明 :


-- %d : 十进制整数, 正数无符号, 负数有 "-" 符号;


-- %o : 八进制无符号整数, 没有 0 前缀;


-- %x : 十六进制无符号整数, 没有 0x 前缀;


-- %u : 十进制无符号整数;



字符占位符说明 :


-- %c : 单个字符输出;


-- %s : 输出字符串;



浮点占位符说明 :


-- %f : 以小数形式输出浮点数, 默认 6 位小数;


-- %e : 以指数形式输出浮点数, 默认 6 位小数;


-- %g : 自动选择 %e 或者 %f 各式;



其它形式占位符 :


-- %p : 输出十六进制形式的指针地址;


-- %@ : 输出 Object-C 对象;



占位符附加字符 :


-- l : 在整型 和 浮点型占位符之前, %d %o %x %u %f %e %g 代表长整型 和 长字符串;


-- n(任意整数) : %8d 代表输出8位数字, 输出总位数;


-- .n : 浮点数 限制小数位数, %5.2f 表示 5位数字 2位小数, 字符串 截取字符个数;


-- - : 字符左对齐;



示例代码 :



#import <Foundation/Foundation.h>
int main(int argc, char **argv)
{
  @autoreleasepool{
  int a = 38;
  long b = 38;
  double c = 3.8;
  double d = 2.3;
  char * oct_c = "Octopus";
  NSString *oct_oc = @"Octopus"; /* 定义字符串, 在字符串前加上 @ 说明是Ovject-C变量, 值赋给一个 NSString 指针 */
  NSDate *date = [[NSDate alloc]init];
  NSLog(@"%d 十进制整型", a);
  NSLog(@"%5d 五位十进制整型", a);
  NSLog(@"%-5d 左对齐的五位十进制整型", a);
  NSLog(@"%o 八进制整型", a);
  NSLog(@"%x 十六进制整型\n", a);
  NSLog(@"%ld 长整型", b);
  NSLog(@"%lx 十六进制长整型\n", b);
  NSLog(@"%f 小数形式输出浮点数", c);
  NSLog(@"%e 指数形式输出浮点数", c);
  NSLog(@"%g 以最简短形式输出浮点数", c);
  NSLog(@"%5f 以五位小数形式输出浮点数", c);
  NSLog(@"%5.3f 小数行书输出, 一共五位, 小数3位\n", c);
  NSLog(@"%lf 小数形式输出长浮点数", d);
  NSLog(@"%le 指数形式输出长浮点数", d);
  NSLog(@"%lg 以最短形式输出长浮点数", d);
  NSLog(@"%5lf 5位小数形式输出长浮点数", d);
  NSLog(@"%5.3lf 5位小数形式输出长浮点数, 其中3位是小数\n", d);
  NSLog(@"%s 输出C字符串", oct_c);
  NSLog(@"%@ 输出Object-C字符串\n", oct_oc);
  NSLog(@"%@ 输出日期", date);
  }
}



执行结果 :




octopus-2:ios octopus$ clang -fobjc-arc -framework Foundation 02-NSLogDemo.m 
octopus-2:ios octopus$ 
octopus-2:ios octopus$ ./a.out 
2014-08-16 19:32:44.210 a.out[1300:507] 38 十进制整型
2014-08-16 19:32:44.212 a.out[1300:507]    38 五位十进制整型
2014-08-16 19:32:44.213 a.out[1300:507] 38    左对齐的五位十进制整型
2014-08-16 19:32:44.214 a.out[1300:507] 46 八进制整型
2014-08-16 19:32:44.214 a.out[1300:507] 26 十六进制整型
2014-08-16 19:32:44.215 a.out[1300:507] 38 长整型
2014-08-16 19:32:44.215 a.out[1300:507] 26 十六进制长整型
2014-08-16 19:32:44.216 a.out[1300:507] 3.800000 小数形式输出浮点数
2014-08-16 19:32:44.216 a.out[1300:507] 3.800000e+00 指数形式输出浮点数
2014-08-16 19:32:44.217 a.out[1300:507] 3.8 以最简短形式输出浮点数
2014-08-16 19:32:44.217 a.out[1300:507] 3.800000 以五位小数形式输出浮点数
2014-08-16 19:32:44.218 a.out[1300:507] 3.800 小数行书输出, 一共五位, 小数3位
2014-08-16 19:32:44.218 a.out[1300:507] 2.300000 小数形式输出长浮点数
2014-08-16 19:32:44.219 a.out[1300:507] 2.300000e+00 指数形式输出长浮点数
2014-08-16 19:32:44.219 a.out[1300:507] 2.3 以最短形式输出长浮点数
2014-08-16 19:32:44.219 a.out[1300:507] 2.300000 5位小数形式输出长浮点数
2014-08-16 19:32:44.220 a.out[1300:507] 2.300 5位小数形式输出长浮点数, 其中3位是小数
2014-08-16 19:32:44.220 a.out[1300:507] Octopus 输出C字符串
2014-08-16 19:32:44.220 a.out[1300:507] Octopus 输出Object-C字符串
2014-08-16 19:32:44.226 a.out[1300:507] 2014-08-16 11:32:44 +0000 输出日期



2. 整型





(1) 整型类型介绍


四种整型 :


-- short int : 短整型, 占16位, mac 上占 2 字节, ios 上占 2 字节, 范围 -32768(-2^15) ~ 32767(2^15 - 1), 3万;


-- int : 整型, 占32位, mac 上占 4 字节, ios 上占 4 字节, 范围 -2147483648(-2^31) ~ 2147483647(2^31 - 1), 21亿;


-- long int : 长整型, 占64位, mac 上占 8 字节, ios 上占 4 字节, (-2^63) ~ (2^63 - 1), 922亿亿;


-- long long : 占64位, mac 上占 8 字节, ios 上占 8 字节;



整数赋值 : 整型赋值时注意范围, 如果超出赋值范围, 会出现警告, 数据也会丢失;


-- 示例程序 :



/*************************************************************************
    > File Name: a.m
    > Author: octopus
    > Mail: octopus_truth.163.com 
    > Created Time: 日  8/17 00:44:19 2014
 ************************************************************************/
#import <Foundation/Foundation.h>
int main(int argc, char * argv[])
{
  @autoreleasepool {
  short int a = 50000; /* short int 范围是 正负3万, 因此超出范围报错 */
  int a = 50000;
  NSLog(@"short int a = %d", a);
  NSLog(@"int a = %d", a);
  }
}



-- 执行结果 :



octopus-2:~ octopus$ clang -fobjc-arc -framework Foundation a.m 
a.m:14:7: error: redefinition of 'a' with a different type: 'int' vs 'short'
                int a = 50000;
                    ^
a.m:13:13: note: previous definition is here
                short int a = 50000;
                          ^
1 error generated.


(2) 进制介绍


八进制 十六进制赋值 : 八进制由 "0" 开头, 十六进制由 "0x" 或者 "0X" 开头;


-- 示例程序 :



#import <Foundation/Foundation.h>
int main(int argc, char **argv)
{
  @autoreleasepool
  {
  int a = 010;  /* 八进制赋值 */
  int b = 0x10; /* 十六进制赋值 */
  int c = 10;  /* 正常十进制赋值 */
  NSLog(@"a = %d", a);
  NSLog(@"b = %d", b);
  NSLog(@"c = %d", c);
  NSLog(@". . . . . ");
  NSLog(@"a = %o", a);
  NSLog(@"b = %x", b);
  }
  return 0;
}


-- 执行结果 :



octopus-2:ios octopus$ clang -fobjc-arc -framework Foundation 03-IntDemo1.m 
octopus-2:ios octopus$ ./a.out 
2014-08-17 00:58:50.513 a.out[1726:507] a = 8
2014-08-17 00:58:50.516 a.out[1726:507] b = 16
2014-08-17 00:58:50.516 a.out[1726:507] c = 10
2014-08-17 00:58:50.516 a.out[1726:507] . . . . . 
2014-08-17 00:58:50.517 a.out[1726:507] a = 10
2014-08-17 00:58:50.517 a.out[1726:507] b = 10


(3) 无符号整型


无符号整型 : 无符号整型 第一位 不是符号位, 范围比原来要大, 例如 short int 范围是 正负3万, unsigned short int 范围是 0到6万, 将5万赋值给 该类型不报错;


-- 示例程序 :



/*************************************************************************
    > File Name: 03-IntDemo2.m
    > Author: octopus
    > Mail: octopus_truth.163.com 
    > Created Time: 日  8/17 01:02:39 2014
 ************************************************************************/
#import <Foundation/Foundation.h>
int main(int argc, char * argv[])
{
  @autoreleasepool {
  unsigned short int a = 50000;
  NSLog(@"a = %d", a);
  }
}

-- 执行结果 :



octopus-2:ios octopus$ clang -fobjc-arc -framework Foundation 03-IntDemo2.m 
octopus-2:ios octopus$ ./a.out 
2014-08-17 01:03:35.508 a.out[1745:507] a = 50000

3. 字符型




字符型数据简介 :


-- 单个字符表示 : 使用 '' 将单个字符引起来, 便是字符常量, 如 'a', 'b' 等;


-- 转义字符表示 : 使用转义符号 \ 来指定字符, 如 '\n' 等;


-- 字符占用空间大小 : 每个字符占用一个字节, 因此 Object-C 不支持中文字符, 因为中文字符都是占 2 ~ 3 个字节;



转义字符 : 分为特殊空白字符 和 区别 单双引号 和 反斜线的转义;


-- 退格符 : '\b' ;


-- 换行符 : '\n' ;


-- 回车符 : '\r' ;


-- 制表符 : '\t' ;


-- 双引号 : '\"' ;


-- 单引号 : '\'' ;


-- 反斜线 : '\\' ;



int 与 char 类型关系 : char 类型可以当做 8 位无符号整数, 取值范围 0 ~ 255;


-- int 赋值给 char : 将 int 类型赋值给 char 变量的时候, 会自动将类型转为 char 类型;



char 类型 示例 :



/*************************************************************************
    > File Name: 05-charDemo.m
    > Author: octopus
    > Mail: octopus_truth.163.com 
    > Created Time: 二  8/19 21:10:37 2014
 ************************************************************************/
#import <Foundation/Foundation.h>
int main(int argc, char * argv[])
{
  @autoreleasepool {
  char a = 'a';
  char b = 100;
  char c = '\n';
  NSLog(@"a = %d", a);
  NSLog(@"b = %c", b);
  NSLog(@"c = %d", c);
  }
}


执行结果 :




octopus-2:ios octopus$ clang -fobjc-arc -framework Foundation 05-charDemo.m 
octopus-2:ios octopus$ ./a.out 
2014-08-19 21:13:24.815 a.out[441:507] a = 97
2014-08-19 21:13:24.816 a.out[441:507] b = d
2014-08-19 21:13:24.817 a.out[441:507] c = 10
目录
相关文章
|
5天前
|
设计模式 前端开发 Swift
探索iOS开发:从初级到高级的旅程
【10月更文挑战第31天】在这篇文章中,我们将一起踏上iOS开发的旅程。无论你是初学者还是有经验的开发者,这篇文章都将为你提供有价值的信息和技巧。我们将从基础开始,逐步深入到更高级的技术和概念。让我们一起探索iOS开发的世界吧!
|
8天前
|
设计模式 前端开发 Swift
探索iOS开发:从初级到高级的旅程
【10月更文挑战第28天】在这篇技术性文章中,我们将一起踏上一段探索iOS开发的旅程。无论你是刚入门的新手,还是希望提升技能的开发者,这篇文章都将为你提供宝贵的指导和灵感。我们将从基础概念开始,逐步深入到高级主题,如设计模式、性能优化等。通过阅读这篇文章,你将获得一个清晰的学习路径,帮助你在iOS开发领域不断成长。
34 2
|
13天前
|
安全 API Swift
探索iOS开发中的Swift语言之美
【10月更文挑战第23天】在数字时代的浪潮中,iOS开发如同一艘航船,而Swift语言则是推动这艘船前进的风帆。本文将带你领略Swift的独特魅力,从语法到设计哲学,再到实际应用案例,我们将一步步深入这个现代编程语言的世界。你将发现,Swift不仅仅是一种编程语言,它是苹果生态系统中的一个创新工具,它让iOS开发变得更加高效、安全和有趣。让我们一起启航,探索Swift的奥秘,感受编程的乐趣。
|
15天前
|
Swift iOS开发 开发者
探索iOS开发中的SwiftUI框架
【10月更文挑战第21天】在苹果生态系统中,SwiftUI的引入无疑为iOS应用开发带来了革命性的变化。本文将通过深入浅出的方式,带领读者了解SwiftUI的基本概念、核心优势以及如何在实际项目中运用这一框架。我们将从一个简单的例子开始,逐步深入到更复杂的应用场景,让初学者能够快速上手,同时也为有经验的开发者提供一些深度使用的技巧和策略。
43 1
|
4天前
|
存储 数据可视化 Swift
探索iOS开发之旅:从新手到专家
【10月更文挑战第33天】在这篇文章中,我们将一起踏上一场激动人心的iOS开发之旅。无论你是刚刚入门的新手,还是已经有一定经验的开发者,这篇文章都将为你提供宝贵的知识和技能。我们将从基础的iOS开发概念开始,逐步深入到更复杂的主题,如用户界面设计、数据存储和网络编程等。通过阅读这篇文章,你将获得成为一名优秀iOS开发者所需的全面技能和知识。让我们一起开始吧!
|
5天前
|
移动开发 Java Android开发
探索Android与iOS开发的差异性与互联性
【10月更文挑战第32天】在移动开发的大潮中,Android和iOS两大平台各领风骚。本文将深入浅出地探讨这两个平台的开发差异,并通过实际代码示例,展示如何在各自平台上实现相似的功能。我们将从开发环境、编程语言、用户界面设计、性能优化等多个角度进行对比分析,旨在为开发者提供跨平台开发的实用指南。
25 0
|
1月前
|
Android开发 Swift iOS开发
探索安卓与iOS开发的差异:从代码到用户体验
【10月更文挑战第5天】在移动应用开发的广阔天地中,安卓和iOS两大平台各占半壁江山。它们在技术架构、开发环境及用户体验上有着根本的不同。本文通过比较这两种平台的开发过程,揭示背后的设计理念和技术选择如何影响最终产品。我们将深入探讨各自平台的代码示例,理解开发者面临的挑战,以及这些差异如何塑造用户的日常体验。
|
6月前
|
安全 编译器 Swift
IOS开发基础知识: 对比 Swift 和 Objective-C 的优缺点。
IOS开发基础知识: 对比 Swift 和 Objective-C 的优缺点。
381 2
|
4月前
|
开发工具 iOS开发 容器
【Azure Blob】关闭Blob 匿名访问,iOS Objective-C SDK连接Storage Account报错
iOS Objective-C 应用连接Azure Storage时,若不关闭账号的匿名访问,程序能正常运行。但关闭匿名访问后,上传到容器时会出现错误:“Public access is not permitted”。解决方法是将创建容器时的公共访问类型从`AZSContainerPublicAccessTypeContainer`改为`AZSContainerPublicAccessTypeOff`,以确保通过授权请求访问。
【Azure Blob】关闭Blob 匿名访问,iOS Objective-C SDK连接Storage Account报错