当前位置

网站首页> 程序设计 > 开源项目 > 程序开发 > 浏览文章

iOS学习笔记之 Objective-C (三)

作者:小梦 来源: 网络 时间: 2024-06-08 阅读:

这篇文章我们讲讲 OC 中的类型。

上一篇文章已经说了,OC是对C的扩展,因此可以直接使用C中的类型:

long l;int i;float f;double f2;bool isTrue;void m;struct {     int score;     char id; } student;// ...

接下来介绍 Foundation 框架中给我们带来的新的类型:

布尔型 BOOL

注意大小写,这不是C中的 bool ,不知道这个类型的定义是否是多此一举。
它有 YESNO 两个值,顾名思义。我们知道,C中定义真假,无非是0或非0,并且它可以喝数值相互转换,但 BOOL 显然不行。
内存中, YESNO 是八位的,值如下:

    YES:00000001    NO :00000000

当使用 BOOL 与数值比较时,只有数值的低位会参与比较,从而得出不准确的结果,所以千万不要这么做。下面上一段官方的example:

#import <Foundation/Foundation.h>BOOL areIntsDifferent(int thing1,int thing2){    if(thing1==thing2)    {        return NO;    }    else {        return YES;    }}NSString *boolString(BOOL yesNo){    if(yesNo == NO)    {        return @"NO";    }    else {        return @"YES";    }}int main(int argc, const char * argv[]){    BOOL areTheyDifferent;    areTheyDifferent = areIntsDifferent(5, 5);        NSLog(@"Are %d and %d different? %@",5,5,boolString(areTheyDifferent));        areTheyDifferent = areIntsDifferent(23,42);    NSLog(@"Are %d and %d different? %@",23,42,boolString(areTheyDifferent));        return 0;}

字符串 NSString

为区别于 C 中的 string 字符串, NSString 字符串会在 双引号前加 @ ,前文中我们已经看到了。

NSString 本身就提供了很多有用的方法,我们看代码:

//...NSString *string1 = [[NSString alloc] init]; // 构造空字符串NSString *string2 = [[NSString alloc] initWithString:@"This is a String!"];  // 构造字符串NSString *string3 = @"This is also a String!";string1 = @"This is the first String!";// 常量字符串,这个最简单。/* 将C中的string类型赋过来 */char *Cstring = "This is a String!"; NSString *cString = [[NSString alloc] initWithCString:Cstring]; NSLog(@"astring:%@,%@",string1,string2); [astring release];//...

创建格式化字符串:

NSString *stringFormat = [[NSString alloc]initWithFormat:@"This is a formated string ,number %i",1];NSLog(@"Format:%@",stringFormat);

对了,EcmaScript 6 已经引进了跨行字符串以及格式化字符串,有兴趣的同学可以谷歌一下!

比较字符串:

NSString *string01 = @"This is a String!"; NSString *string02 = @"This is a String!";NSString *astring01 = @"This is a String!"; NSString *astring02 = @"this is a String!";/* 判断两者内容是否相同,下面两种方法都可以: */ BOOL isEqual = [string01 isEqualToString:string02]; // YESBOOL compare1 = [string01 compare:string02] == NSOrderedSame;  /* NSOrderedAscending判断两对象值的大小:按字母顺序进行比较,astring02大于astring01为YES */BOOL compare2 = [astring01 compare:astring02] == NSOrderedAscending;/* NSOrderedDescending判断两对象值的大小:按字母顺序进行比较,astring02小于astring01为真 */BOOL result = [astring01 compare:astring02] == NSOrderedDescending;    

查找字符串某处是否包含其他字符串:

NSString *string1 = @"This is a string"; NSString *string2 = @"is a";NSRange range = [string1 rangeOfString:string2];/*   NSRange 类型实际上是一个C的结构体,不要被这个不明觉厉的东东吓到  struct {    int location;    int length;  } NSRange;*/int location = range.location;  // 包含字符串所在的起始位置,这里的值为5,如不存在,为-1int leight = range.length;  // 长度,这里的值为4,如不存在,为0

截取字符串:

NSString *string0 = @"This is a string";// 1.从字符串的开头一直截取到指定的位置,但不包括该位置的字符NSString *string1 = [string0 substringToIndex:3]; NSLog(@"string1:%@",string1);  // string1:Thi// 2.以指定位置开始(包括指定位置的字符),并包括之后的全部字符NSString *string2 = [string0 substringFromIndex:3]; NSLog(@"string2:%@",string2);  // string2:s is a string// 3.按照所给出的位置,长度,任意地从字符串中截取子串NSString *string3 = [string0 substringWithRange:NSMakeRange(0, 4)];/* NSMakeRange 顾名思义,创建一个NSRange类型的结构体 */NSLog(@"string3:%@",string3);  // string3:This

插入字符串

OC这种静态语言,中的很多引用类型(这么说合适么?)的 内存空间都是固定的内存空间都是固定的内存空间都是固定的,对于习惯了 js 和 python 的程序员们,重要的事情说三遍!
所以嘞,什么NSString类型啊,以及我们后面要讲的NSArray、NSSet这类东西长度都是固定的。当然OC也提供了长度可变的相应类型,后者一般是前者的子集。

NSMutableString *String1 = [[NSMutableString alloc] initWithString:@"This is a NSMutableString"]; 

热点阅读

网友最爱