我们都知道开发IOS需要使用的语言Objective-C这个是基础的,近几年IOS又推出了一个目前不是很成熟的语言Swift。这里我们先从Objective-C开始熟悉,后面会介绍到Swift,一下称为oc.
首先我们要知道oc它也是面向对象的语言,如果你熟悉Java,那你学起来就简单了。oc是基于语言的基础上进一步封装出来的语言,c语言我们都知道它是面向过程的。oc在它的基础上封装成为面向对象的语言,c语言中的基础类型方法函数,在oc中都是支持的。
oc中的基础类型
在oc中的基础类型我们可以看到他和Java中的类型差不多,有的只是在开通增加了NS两个字母。
OC的基本数据类型包括:整型、浮点型、布尔型、枚举型。
一、整型
整型包含以下几种类型
1.short(短整型):内存中通常占2字节,即16位,取值范围-32768 - +32767。
2.int(整型):通常占4字节,取值范围-2147483648 - 2147483647
3.long(长整型):通常占8字节
4.long long(长整型):通常占8字节
关于内存中占用的字节数,OC中并没有硬性的规定,只是需要字节数符合以下条件:
short <= int <= long<= long long
因此在我们实际开发时需要注意在mac还是在ios系统上到底是占多大的空间,以免数据溢出。
// 基本数据类型
int a = 10;
//下面的数已经超出了int的取值范围,编译器会提出警告
int b = 10000000000000;
NSLog(@"%d",b);
//而这个数在long long的取值范围内,所以不会溢出
long long c =1000000000000;
NSLog(@"%lld",c);
//mac系统下输出各种类型占用的位数
//输出:short:2 int:4 long:8 long long:8
NSLog(@"short:%lu int:%lu long:%lu long long:%lu",sizeof(short),sizeof(int),sizeof(long),sizeof(long long));
整型有3种进制表示方式:十进制,八进制,十六进制
//八进制,以0开头
int i8 = 010;
//十进制
int i10 = 10;
//十六进制,以0x或者0X开头
int i16 = 0x10;
//8 10 16
NSLog(@"%d %d %d",i8,i10,i16);
整型前加上unsigned关键字后,将它变成无符号整型,最高位不是符号位,而是数值位。无符号整数不能表示负数,但是表示范围大了。
二、浮点型
浮点类型包括float、double和long double,float占用4字节,double占8字节,long double占16字节。
OC中浮点数表示方法有两种,一种是包含小数点的简单的浮点数,另一种是科学计数法形式的浮点数
/利用浮点数计算类型取值范围
int i0 =-1/0.0;
int i1 = 1/0.0;
//输出:int型取值范围:-2147483648-2147483647
NSLog(@"int型取值范围:%d-%d",i0,i1);
三、布尔型
OC中BOOL类型有两个值:YES和NO
BOOL 和我们Java中的boolean 的true和false是一样的作用
BOOL b1 = YES;
if (b1) {
NSLog(@"%d",b1);
}
BOOL b1 = 10;
//输出: YES: 10
if (b1) {
NSLog(@"YES: %d",b1);
}else{
NSLog(@"NO: %d",b1);
}
BOOL b1 = 768;
//输出: NO: 0
if (b1) {
NSLog(@"YES: %d",b1);
}else{
注意:不要以为所有的非0整数变量赋给BOOL类型就一定得到YES,上面的768的出的就是NO,BOOL类型实质上就是signed char。
四、枚举型
一个变量只有几种可能的值,这个变量就可以定义为枚举变量
这enum season {spring,summer,fall,winter};
enum season mySeason = spring;
mySeason = summer; 里写代码片
格式字符
在NSLog函数中我们使用了很多格式字符,如%d,%lu等。我们这里将介绍NSLog支持的格式字符。
格式字符 说明
d 以带符号的十进制形式输出整数
o 以八进制无符号形式输出整数
x 以十六进制无符号形式输出整数
u 以无符号十进制形式输出整数
c 以字符形式输出,只输出一个字符
s 输出c风格的字符串
f 以小数形式输出浮点数,默认输出6位小数
e 以指数形式输出浮点数,数字部分默认输出6位小数
g 自动选用%f和%e,保证输出宽度较短的格式,而且不会输出无意义的0
p 以十六进制形式输出指针变量所代表的地址值
@ 输出OC的对象
%与格式字符之间可以插入以下附加符号
格式字符 说明
l 可在格式字符d、o、x、u之前,用于输出长整型整数,也可在f、e、g之前,用书输出长浮点型数
m(m代表一个正整数) 指定输出数据所占的最小宽度
.n(n代表一个正整数) 对于浮点数,表示输出n位小数,对于字符串,表示截取的字符个数
- 表示输出的字符向左边对齐
这里我们没有介绍到NS在哪里用到了,在oc中字符串我们怎么表示那,Java 中我们用String 那么oc当中是这样的NSString,他是表示字符串的。下面也是我们常用的:
NSString 字符串
NSNumber 数字
NSArray 数组(有序的对象集合)与NSMutableArray
NSString 字符串
最常用的属性和方法:
直接赋值:NSString *myString=@"Yang";
多个字符串拼接:NSString *myString=[otherString stringByAppendingString:second string];
创建格式化字符串:NSString *myString=[NSString stringWithFormat:@"%d%@",myInt,myObject];
判断字符串是否相等:[strA isEqualToString: strB];
二、NSNumber 数字
这个我们没什么好介绍的。
三、NSArray 数组(有序的对象集合)与NSMutableArray
NSArray主要方法:
计算数组对象个数:-(NSInteger)count;
获取数组指定下表对象:-(id)objectAtIndex:(NSUinteger)index;
获取数组中第一个对象:-(id)firstObject;
获取数组中最后一个对象:-(id)lastObject;
NSMutableArray主要方法:
继承NSArray所有方法;
在可变数组末端添加一个对象 :-(void)addObject:(id)object;
在可变数组指定的索引位置添加一个对象:- (void) insertObject:(id)object atIndex:(NSUInteger)index;
在可变数组指定的位置,删除一个对象 - (void) removeObjectAtIndext:(NSUInteger)index;
遍历数组(对象容器)中对象:
假设事先知道数组中对象是NSString对象 ,指定对象类型进行
NSArray *myArray=@[@"a",@"b",@"c"];
for (NSString * string in myArray) {
NSLog (@"NSString:%@",string);
}
组中存有不同类型的对象,先将对象类型视为ID类型,在对ID进行操作时,再判断对象具体类型:
for (id obj in myArray){
//先判断它是NSString类型的对象
if ([obj isKindOfClass:[NSString class]])
//对NSString类型的对象进行方法调用
int value=[obj intValue];
}
NSDictonary 字典与NSMutableDictionary
字典里面的数据是key-value一对一出现的,key就是一个字符串,value是一个对象。所以也可以称为key-object.
NSDictionary方法:
-(id)objectForKey:(id)key;
NSMutableDictionary方法:
添加一对key-object: -(void)setObject:(id)anObject forKey:(id)key;
删除一对key-object: -(void)removeObjectForKey:(id)key;
删除字典里所有的object: -(void)removeAllObjects;
遍历字典中的对象:
NSDictionary *myDictionay=@{ ….};
for(id key in myDictionary){
//通过key,获取到相应的value
id value=[myDictionary objectForKey:key];
//接下里就可以对value进行操作
其实oc当中的遍历循环和我们的Java中的都是一样的,个别的有区别的 我们后面会介绍,这里提一下我们在Android 中打印的时候我们用的是Log,oc 中我们用的是 NSLog,java 中用的是System.out.println(“打印内容”);
声明:这里介绍的oc是有Java基础的和Android开发经验的的总结。
小白绕行吧。。。