详解Objective-C最基础语法和基础类型
创始人
2024-08-02 17:41:11
0次

Objective-C最基础语法和基础类型是本文要讲解的内容,不多说,我们先来看内容,我对Objective-C了解还不深,只知道一些最基础的东西,总结一下。

基础数据类型

在Objective-C里面也可以使用C的基础类型,比如int,float等,但一些Objective-C的基础类型有与C的对应的,看上去很类似,却提供了更多的功能和特性。比如string和NSString,string就是普通的C语言的字符串,而NSString是一个object,不仅包含了字符串,还有一些跟显示相关的接口等,你可以直接在屏幕上打印输出一个NSString,却不能对string这样操作。

NSInteger、NSUInteger、CGFloat

这几个类型跟C里的类型基本是一样的,但还是稍有不同,这其实是“type define”,比如NSInteger的定义是这样的:

  1.  #if_LP64_||NS_BUILD_32_LIKE_64  
  2. typedef long NSInteger;  
  3. typedef unsigned long NSInteger;  
  4. #else  
  5. typedef int NSInteger;  
  6. typedef unsigned int NSInteger;  
  7. #endif  

也就是说当需要使用int类型的变量的时候,可以像写C的程序一样,用int,也可以用NSInteger,但更推荐使用NSInteger,因为这样就不用考虑设备是32位的还是64位的。

BOOL

OC里面的bool值的取值是YES和NO,而不是TRUE和FALSE。

NSNumber

有人说既然都有了NSInteger等这些基础类型了为什么还要有NSNumber?它们的功能当然是不同的。

NSInteger是基础类型,但是NSNumber是一个类。如果想要存储一个数值,直接用NSInteger是不行的,比如在一个Array里面这样用:

  1. NSArray *array = [[NSArray alloc]init];  
  2. [array addObject:3];//会编译错误  

这样是会引发编译错误的,因为NSArray里面放的需要是一个类,但‘3’不是。这个时候需要用到NSNumber:

  1. NSArray *array = [[NSArray alloc]init];  
  2.  [array addObject:[NSNumber numberWithInt:3]];   
  3. NSString、NSMutableString 

字符串一直是个比较复杂的类型,提供的功能很多,涉及的问题也比较多,比如字符串的比较、格式化、拼接等等,这可以专门开一个专题,这里只是简单介绍一下。

Objective-C里面有个特殊的符号:“@”,这个符号大概的意思是表示“这是Objective-C的”。在使用NSString的使用双引号的前面一定要加这个符号,否则就是普通的C字符串。而且NSString是一个类,定义一个NSString的变量的时候要使用指针。比如:

  1.  NSString *str = "a string";//这是错误的  
  2. NSString str =@"a string";//这也是错误的  
  3. NSString *str = @"a new string";//这是正确的  

 一个NSString变量赋值了之后不能改变其值(当然可以重新给它赋其他的值),当需要使用可变的字符串的时候可以使用NSMutableString。NSMutableString继承值NSString,额外提供了一些改变值的方法。比如:

  1.  NSMutableString *str = @"";  
  2. [str appendString:@"hello "];//str = @"hello "  
  3. [str appendFormat:@"my number is:%d",1];//str = @"hello my number is 1"   
  4.  NSArray、NSMutableArray 

这是OC里面的两个集合。顾名思义,NSArray的容积是固定的,而NSMutableArray的是可变的,当添加的对象多余容积时会自动扩增。存放入集合中的一定是一个类的实例。 初始化一个NSArray的代码如:

  1. NSArray *array = [NSArray arrayWithObjects:obj1,obj2...,nil];//注意要以nil结尾,否则会有编译警告  

NSArray常用的属性当然就是count了,比如

  1. NSUInteger count = [array count];//  

当要判断一个集合里面是否包含某个元素的时候需要注意,使用的方法跟.net里面的稍有不同,如:

  1. if ([array indexOfObject:obj3] == NSNotFound]{  
  2. //do something  
  3. }   
  4. NSMutableArray的使用方法跟NSArray的类似,常用的方法有:  
  5. + (NSMutableArray *)array;  
  6. -  (void)addOvject:(id)object;  
  7. - (void)removeObject:(id)object;  
  8. - (void)removeAllObjects;  
  9. - (void)insertObject:(id)object atIndex:(unsigned)index;   
  10. NSDictionary、NSMutableDictionary    

OC的字典集合,跟其他语言的字典类似,跟NSArray一样,当直接调添加若干个对象的初始化方法时,要以nil结尾,比如:

  1. NSDictionary *dic = [NSDictionary dictionaryWithObjectsAndKeys:obj1,@"key1",obj2,@"key2",nil];//注意以nil结尾  

当需要判断是否包含某个元素的时候,不是调用contain方法,而是直接判断返回的值是不是nil,比如:

  1.  if ([dic objectForKey:@"key3"]){  
  2. //这里的代码不会执行,因为key3返回的是nil  
  3. }   
  4. NSMutableDictionary的使用方法类似,常用的方法有:  
  5.  + (NSMultableDictionary *)dictionary;  
  6. - (void)addObject:(id)object forKey:(id)key;  
  7. - (void)removeObjectForKey:(id)key  
  8. - (void)removeAllObjects;   
  9. NSDate     

日期和时间。OObjective-C里面的日期类使用起来比较复杂,即使是实现简单的加一天减一个小时这样的操作都要经过很多的代码从能实现,这里只是一带而过,在其他的文章里会重新提到。

获取当前时间的代码为:

  1. NSDate *today = [NSDate date];  

这里不得不发一些牢骚,很多人都说Objective-C是多么多么优美的语言,但个人感觉有不少地方实在谈不上优美,就比如这个NSDate,功能是蛮强大的,但使用起来真的很不方便,对于新手而言完全是无从下手。这且不说,获取当前时间居然用的不是today而date,如果没了解过,谁会想到date=today?    

nil

Objective-C里面空指针对象是nil,而不是null。

id

Objective-C支持动态类型,也就是在写代码的时候不确定是声明类型,在程序运行的时候从能判断。动态类型的变量用id来声明,比如:

 id tem = 1;//注意是id,而不是id *,除非你真的真的是想声明一个这样的指针

  1. tem = @"abc";  
  2. tem = [[myClass alloc]init];   
  3. @selector 

selector是个非常特殊的类型,有点类似与函数指针,可以把一个函数当作参数来传递。这个需要专门讨论

小结:关于Objective-C最基础语法和基础类型的内容介绍完了,希望本文对你会有所帮助,更多关于Objective-C的更多内容请参考编辑推荐。

相关内容

热门资讯

PHP新手之PHP入门 PHP是一种易于学习和使用的服务器端脚本语言。只需要很少的编程知识你就能使用PHP建立一个真正交互的...
网络中立的未来 网络中立性是什... 《牛津词典》中对“网络中立”的解释是“电信运营商应秉持的一种原则,即不考虑来源地提供所有内容和应用的...
各种千兆交换机的数据接口类型详... 千兆交换机有很多值得学习的地方,这里我们主要介绍各种千兆交换机的数据接口类型,作为局域网的主要连接设...
粉嫩如何诠释霸道 东芝M805... “霸道粉”是个什么玩意东芝M805拿过来的时候,笔者扑哧笑了,不是笑这款笔记本,而是笑这款产品的颜色...
如何利用交换机和端口设置来管理... 在网络管理中,总是有些人让管理员头疼。下面我们就将介绍一下一个网管员利用交换机以及端口设置等来进行D...
什么是大数据安全 什么是大数据... 在《为什么需要大数据安全分析》一文中,我们已经阐述了一个重要观点,即:安全要素信息呈现出大数据的特征...
全面诠释网络负载均衡 负载均衡的出现大大缓解了服务器的压力,更是有效的利用了资源,提高了效率。那么我们现在来说一下网络负载...
如何允许远程连接到MySQL数... [[277004]]【51CTO.com快译】默认情况下,MySQL服务器仅侦听来自localhos...
30分钟搞定iOS自定义相机 最近公司的项目中用到了相机,由于不用系统的相机,UI给的相机切图,必须自定义才可以。就花时间简单研究...
Windows恶意软件20年“... 在Windows的早期年代,病毒游走于系统之间,偶尔删除文件(但被删除的文件几乎都是可恢复的),并弹...