我对OC了解还不深,只知道一些最基础的东西,总结一下。
- 基础数据类型
在OC里面也可以使用C的基础类型,比如int,float等,但一些OC的基础类型有与C的对应的,看上去很类似,却提供了更多的功能和特性。比如string和NSString,string就是普通的C语言的字符串,而NSString是一个object,不仅包含了字符串,还有一些跟显示相关的接口等,你可以直接在屏幕上打印输出一个NSString,却不能对string这样操作。
- NSInteger、NSUInteger、CGFloat
#if_LP64_||NS_BUILD_32_LIKE_64 typedef long NSInteger; typedef unsigned long NSInteger; #else typedef int NSInteger; typedef unsigned int NSInteger; #endif |
- BOOL
OC里面的bool值的取值是YES和NO,而不是TRUE和FALSE。
- NSNumber
有人说既然都有了NSInteger等这些基础类型了为什么还要有NSNumber?它们的功能当然是不同的。
NSInteger是基础类型,但是NSNumber是一个类。如果想要存储一个数值,直接用NSInteger是不行的,比如在一个Array里面这样用:
NSArray *array = [[NSArray alloc]init]; [array addObject:3];//会编译错误 |
NSArray *array = [[NSArray alloc]init]; [array addObject:[NSNumber numberWithInt:3]]; |
- NSString、NSMutableString
字符串一直是个比较复杂的类型,提供的功能很多,涉及的问题也比较多,比如字符串的比较、格式化、拼接等等,这可以专门开一个专题,这里只是简单介绍一下。
OC里面有个特殊的符号:“@”,这个符号大概的意思是表示“这是OC的”。在使用NSString的使用双引号的前面一定要加这个符号,否则就是普通的C字符串。而且NSString是一个类,定义一个NSString的变量的时候要使用指针。比如:
NSString *str = "a string";//这是错误的 NSString str =@"a string";//这也是错误的 NSString *str = @"a new string";//这是正确的 |
NSMutableString *str = @""; [str appendString:@"hello "];//str = @"hello " [str appendFormat:@"my number is:%d",1];//str = @"hello my number is 1" |
- NSArray、NSMutableArray
这是OC里面的两个集合。顾名思义,NSArray的容积是固定的,而NSMutableArray的是可变的,当添加的对象多余容积时会自动扩增。存放入集合中的一定是一个类的实例。 初始化一个NSArray的代码如:
NSArray *array = [NSArray arrayWithObjects:obj1,obj2...,nil];//注意要以nil结尾,否则会有编译警告 |
NSUInteger count = [array count];// |
当要判断一个集合里面是否包含某个元素的时候需要注意,使用的方法跟.net里面的稍有不同,如:
if ([array indexOfObject:obj3] == NSNotFound]{ //do something } |
NSMutableArray的使用方法跟NSArray的类似,常用的方法有:
+ (NSMutableArray *)array; - (void)addOvject:(id)object; - (void)removeObject:(id)object; - (void)removeAllObjects; - (void)insertObject:(id)object atIndex:(unsigned)index; |
- NSDictionary、NSMutableDictionary
OC的字典集合,跟其他语言的字典类似,跟NSArray一样,当直接调添加若干个对象的初始化方法时,要以nil结尾,比如:
NSDictionary *dic = [NSDictionary dictionaryWithObjectsAndKeys:obj1,@"key1",obj2,@"key2",nil];//注意以nil结尾 |
当需要判断是否包含某个元素的时候,不是调用contain方法,而是直接判断返回的值是不是nil,比如:
if ([dic objectForKey:@"key3"]){ //这里的代码不会执行,因为key3返回的是nil } |
NSMutableDictionary的使用方法类似,常用的方法有:
+ (NSMultableDictionary *)dictionary; - (void)addObject:(id)object forKey:(id)key; - (void)removeObjectForKey:(id)key - (void)removeAllObjects; |
- NSDate
获取当前时间的代码为:
NSDate *today = [NSDate date]; |
这里不得不发一些牢骚,很多人都说OC是多么多么优美的语言,但个人感觉有不少地方实在谈不上优美,就比如这个NSDate,功能是蛮强大的,但使用起来真的很不方便,对于新手而言完全是无从下手。这且不说,获取当前时间居然用的不是today而date,如果没了解过,谁会想到date=today?
- nil
OC里面空指针对象是nil,而不是null。
- id
OC支持动态类型,也就是在写代码的时候不确定是声明类型,在程序运行的时候从能判断。动态类型的变量用id来声明,比如:
id tem = 1;//注意是id,而不是id *,除非你真的真的是想声明一个这样的指针 tem = @"abc"; tem = [[myClass alloc]init]; |
- @selector
selector是个非常特殊的类型,有点类似与函数指针,可以把一个函数当作参数来传递。这个需要专门讨论。
转自:http://longer3436.blog.163.com/blog/static/128330622010112011408123/