android工程师开发IOS oc浅析(1 )

我们都知道开发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开发经验的的总结。

小白绕行吧。。。

猜你喜欢

转载自blog.csdn.net/qq_34476727/article/details/80450297