整理和查找了一下以前学习时候的资料
OC数据类型
1.数据类型
- 数据类型 : 基本数据类型、指针数据类型
- 基本数据类型: 整值型、字符型(char)、布尔型、空类型(void)
- 指针数控类型:类(class)、double
2.c和oc的基本数据类型
- int:声明整型变量
- double:声明双精度变量
- float:声明浮点型变量
- char:声明字符型变量
- id: 通用的指针类型
- enum:声明枚举类型
- long:声明长整型变量或函数
- short:声明短整型变量或函数
- signed:声明有符号类型变量
- struct:声明结构体变量
- void:声明函数无返回值
3.数据类型格式化说明符
数据类型 | OC关键字 | 格式说明引导符 |
---|---|---|
整型 | int | %d.%i |
短整型 | short int | %hd.%hi |
长类型 | long int | %ld.%li |
无符号短整型 | unsigned int | %u |
短整型 | unsigned short | %hu |
无符号长整型 | unsigned long | %lu |
浮点型 | float | %f |
双精度型 | double | %f |
长双精度型 | long double | %lf |
字符型 | char | %c |
4.具体的数据整型
整数类型
oc中整数类型用int来表示,格式化符号用%i或%d来表示
比如:int a=100;
oc语言的整型常量默认为int型,声明long型常量可以后加“l”或“L”,如:
int b=600;//long c=888888888L;
类型 | 占用存储空间 | 值域范围 |
---|---|---|
Byte | 1个字节 | -128—127 |
short | 2个字节 | -2′15—2′15-1 |
int | 4个字节 | -2′31—2′31-1 |
long | 8个字节 | -2′63—2′63-1 |
注释:2‘63为2的63次方
浮点类型
浮点类型的变量可以存储包括小数的值
oc中有两种浮点类型
·float 有效数字为6-7位 格式化说明符号用%f表示
·double 有效数字为15-16位 格式化说明符号用%f.%e或%g表示
oc中浮点型常量默认为double型,如果要声明一个常量为float,在数字的后面加f或F
例如:double m=3.14159;//正确 float f=3.14f;
类型 | 占用存储空间 | 值域范围 |
---|---|---|
float | 4字节 | -3.403E38 |
double | 8字节 | -1.798E308—1.798E |
字符串char
char型数据用来表示通常意义上的“字符”,格式化说明符用%c表示
字符常量为用单引号括起来的单个字符,
例如:char achar='a';char b='0';
char cChar='苹';值域范围:-128—127
"\n"、oc编译器把这个当做单个字符
unsigned char 值域范围:0~255
oc字符采用Unicode编码,每个字符占两个字节,因而可用十六进制编码形式表示,
例如:char c1='\u0061';
注:Unicode是全球语言统一编码
逻辑型Boolean(布尔型)
Boolean类型指的是用于存储真值和假值的变量,一般用于程序流程控制。
Boolean类型数据允许取值true或false,也可以是0或非0的整数代替true和false,这点和java语言不同。
实例:
Boolean flag=true
if(flag){
NSLog(@"hello iphone");
}
限定词
·long int:声明变量XX为long的整型变量,格式化符号为¥%li,如:long int a;
·long long int:声明变量XX为long long的整型变量,格式符号位%lli,如:long long int b;
·long double:跟int基本相同;
·unsigned int:声明无符号的整型变量,如:unsigned int c;
·signed int:声明有符号的整型变量。如:signed int d。
void类型(空类型)
告诉编译器没有任何范围类型的值
不能像其他数据类型一样来声明变量
例如:void i=10;//错误
void通常与方法一起搭配使用,比如:
-(void)test{
//code
}
id类型
id类型是oc中独有的数据类型,它可以存储任何类型的对象,从某种意义上说,它就是一般的对象类型。
·将number声明为id类型的变量,
如: id number;
·格式化说明符:%p
OC 类
是具有相同特征和行为的事物的抽象
万事万物皆对象
对象是类的实例
类是对象的类型
面向对象的特点分为:
- 封装
- 继承
- 多态
字符串
知识点
1.NSString
2.NSMutableString
了解:
1.什么是字符编码
是一套法则,使用该法则能够对自然语言的字符的一个集合(如字母表或音节表),与其他东西的一个集合(如号码或电脉 冲)进行配对。即在符号集合与数字系统之间建立对应关系。
2..UTF8编码
UTF8编码:UTF-8(8-bit Unicode Transformation Format)是一种针对Unicode的可变长度字符编码,又称万国码。由Ken Thompson于1992年创建。现在已经标准化为RFC 3629。UTF-8用1到6个字节编码UNICODE字符。用在网页上可以同一页面显示中文简体繁体及其它语言(如英文,日文,韩文)。
========= 不可变字符串(NSString) =========
(1).为什么需要NSString对象
答:在OC中创建字符串时,一般不使用C的方法,
因为C将字符串作为字符数组,所以在操作时会有很多不方便的地方,
在Cocoa中NSString集成的一些方法,可以很方便的操作字符串。
(2).OC中定义字符串和C语言定义字符串
//C字符串常量
char *cString = "c字符串";
printf("c string is %s\n",cString);
//OC字符串常量
NSString *ocString = @"oc字符串";
NSLog(@"oc string is %@",ocString);
(3).NSLog如何格式化NSString对象
%@
(4).字符串创建
<1>定义一个空的不可变字符串(一般用不到):
NSString *string = [[NSString alloc] init];
<2>定义一个有值的字符串(一般用不到)
[NSString stringWithString:@"test"];
[[NSString alloc] initWithString:<#(NSString *)#>];
(5).如何格式化一个字符串
[NSString stringWithFormat:<#(NSString *), ...#>];
(6).C语言字符串和NSString的转换
<1>c字符串转化为NSString
[NSString stringWithUTF8String:c];
<2>NSString转化为C
[string UTF8String];
(7).如何从文本文件中读取字符串
//第1种:
/*
stringWithContentsOfFile:要读取文件路径
encoding:编码方式
error:错误信息,可以传nil
*/
//类方法
s = [NSString stringWithContentsOfFile:path encoding:NSUTF8StringEncoding error:nil];
//对象方法
[[NSString alloc] initWithContentsOfFile:<#(NSString *)#> encoding:<#(NSStringEncoding)#> error:<#(NSError *__autoreleasing *)#>];
第2种:
//把路径的字符串转化为NSURL对象
NSURL *filePath = [NSURL fileURLWithPath:path];
string = [NSString stringWithContentsOfURL:filePath encoding:NSUTF8StringEncoding error:nil];
(8).如何把一个字符串写入到文件中
/*
writeToFile:要写入的文件路径(file path)
atomically:YES表示原子性,NO表示非原子性。一般是YES(比较安全),当为YES,系统在写入的过程中会创建一个临时文件,系统先把数据写入到临时文件里面,如果写入成功,最后赋值到目标文件里面。
encoding:编码,一般是UTF8(NSUTF8StringEncoding)
*/
NSError *error;
//文件不存在会自动创建
[string writeToFile:path atomically:YESencoding:NSUTF8StringEncoding error:&error];
(9).如何从网络上读取字符串
NSURL *url = [NSURL URLWithString:远程地址];
string = [NSString stringWithContentsOfURL: url encoding:NSUTF8StringEncoding error:nil];
(10).求字符串长度(一个中文长度为1)
[string length]
(11).通过索引获取相应的字符
[string characterAtIndex:0]
(12).字符串判断
1)判断两个字符串内容是否相同
[s1 isEqualToString:s2]
2)判断两个字符串是否是同一个对象
if (s1 == s2){
NSLog(@"s1和s2是同一个对象");
}else{
NSLog(@"s1和s2不是同一个对象");
}
(13).字符串比较
1)两个字符串比较(区分大小写)
NSComparisonResult result = [s1 compare:s2];
if (result == NSOrderedAscending) {
NSLog(@"s2 > s1");
} else if (result == NSOrderedSame){
NSLog(@"s1 = s2");
}else{
NSLog(@"s2 < s1");
}
2)比较两个字符串(忽略大小写)
//忽略大小写
result = [s1 caseInsensitiveCompare:s2];
(14).转化为基本类型(int,float,bool,double,integer)
//转化为int
[num2 intValue];
//转化为NSInteger
[num2 integerValue];
//转化为Double
[num2 doubleValue];
//float
[num2 floatValue];
//long long
[num2 longLongValue];
//bool
[num2 boolValue];
(15).把一个字符串转化为大写,小写,各个单词的首字母大写
//转化为大写
NSString *upperString = [s1 uppercaseString];
NSLog(@"大写:%@",upperString);
//转化为小写
NSString *lowString = [s1 lowercaseString];
NSLog(@"小写:%@",lowString);
//各个单词的首字母大写
NSString *ss = [s1 capitalizedString];
NSLog(@"各个单词的首字母大写:%@",ss);
(16). 替换字符串
[S stringByReplacingOccurrencesOfString:A withString:B];//把S中所有的A换为B
[string stringByReplacingOccurrencesOfString:@"l3l" withString:@"s"];
(17).分割一个字符串,转化为数组
[string componentsSeparatedByString:@“分隔符”];
(18).字符串截取
//从指定索引截取到最后
NSString *subString = [string substringFromIndex:起始索引];
//从开始截取到指定的索引之前
subString = [string substringToIndex:终止索引(不包括当前索引)]’
//截取字符串的一部分
//范围
NSRange range = NSMakeRange(2, 3);
[string substringWithRange:range];
(19).字符串拼接
(1)拼接一个字符串
[str1 stringByAppendingString:str2]
(2)拼接一个格式化字符串
[str1 stringByAppendingFormat:@" %@",str2]
(20).查找字符串
//[string rangeOfString:要查找的字符串]
//只会查找第一次出现的字符串,从前向后查找
range = [string rangeOfString:@"test"];
NSLog(@"%ld - %ld",range.location,range.length);
/*
NSCaseInsensitiveSearch 不区分大小写
NSLiteralSearch 区分大小写
NSBackwardsSearch 从后向前查找
*/
range = [string rangeOfString:@"test" options:NSBackwardsSearch];
NSLog(@"%ld - %ld",range.location,range.length);
(21).判断一个字符串是否以某个前缀或者后缀
//判断是否以某个字符串前缀开头
[string hasPrefix:@"he22"]
//判断是否以某个字符串前缀结尾
[string hasSuffix:@"ds"];
(22).路径
1)路径后面追加一个文件名或者路径(网络会用到)
[path stringByAppendingPathComponent:文件名或者文件夹名字];
2)把指定的字符串数组拼接成路径
NSMutableArray *array = [NSMutableArrayarrayWithObjects:@"Users",@"qianfeng",@"desktop",@"新建文件夹", nil];
newPath = [NSString pathWithComponents:array];
3)将路径分割成字符串数组
NSArray *components = [path pathComponents];
4)判断是否是绝对路径
BOOL isAbsolutePath = [path isAbsolutePath];
5)获取最后一个目录或者文件名
//取路径的最后一部分
NSString *s = [path lastPathComponent];
6)删除路径最后一部分
[path stringByDeletingLastPathComponent];
7)获取文件后缀
[path pathExtension]
8)删除后缀
[path stringByDeletingPathExtension];
9)添加后缀
[path stringByAppendingPathExtension:@"png"];
.
========= 可变字符串(NSMutableString)一般用不到 =========
(1).初始化可变字符串(必须初始化)
NSMutableString *string = [[NSMutableString alloc] init];
string = [NSMutableString string];
(2).初始化带有字符串的可变字符串
[NSMutableString stringWithString:@"sss"];
(3).设置字符串
//设置字符串(会覆盖原来字符串内容)
[string setString:@"测试"];
(4).在指定的位置插入字符串
[string insertString:@“要插入的字符串” atIndex:插入字符串的下标];
(5).追加一个部分字符串(在最后追加)
[string appendString:@"🐷"];
//追加格式化字符串
[string appendFormat:@"dog=%@ cat=%@",@"🐶",@"🐱"];
(6).删除字符串一部分
//要删除的范围
NSRange deleteRange = NSMakeRange(3, 2);
//删除指定范围的字符
[string deleteCharactersInRange:deleteRange];