Objective-C 2.0 学习笔记十一(Number, Strings, and Collections)
来源:互联网 发布:软件开发知识产权归属 编辑:程序博客网 时间:2024/05/14 20:11
变更履历
版本:v1.0
介绍
本节记录了Foundation框架提供的一些基本对象。这些基本对象包括数字、字符串和集合。集合指的是数组(arrays)、字典(dictionaries)和集(sets)。
Number Objects
基本类型不是对象,不仅是 OC,在 Java 中也是这样。在 NSArray 这样的类中是不能使用基本数据类型的,这时我们可以使用 NSNumber 类,它可以存储任何基本数据类型(包括char)。下面是一个例子:
#import <Foundation/Foundation.h>int main(int argc, const char *argv[]){ NSAutoreleasePool *pool = [[NSAutoreleasePool alloc] init]; NSNumber *myNumber, *floatNumber, *intNumber; NSInteger myInt; // integer value // intNumber = [NSNumber numberWithInteger: 100]; myInt = [intNumber integerValue]; NSLog(@"%li", (long) myInt); // long value // myNumber = [NSNumber numberWithLong: 0xabcdef]; NSLog(@"%lx", (long) myNumber); // char value // myNumber = [NSNumber numberWithLong: 'X']; NSLog(@"%c", [myNumber charValue]); // float value floatNumber = [NSNumber numberWithFloat: 100.00]; NSLog(@"%g", [floatNumber floatValue]); // double // myNumber = [NSNumber numberWithDouble: 12345e+15]; NSLog(@"%lg", [myNumber doubleValue]); // Wrong access here // NSLog(@"%li", (long) [myNumber integerValue]); // Test two Numbers for equality // if ( [intNumber isEqualToNumber: floatNumber] == YES ) NSLog(@"Number are equal"); else NSLog(@"Number are not equal"); // Test if one Number is <, ==, or > second Number // if ( [intNumber compare: myNumber] == NSOrderedAscending ) NSLog(@"First number is less than second"); [pool drain]; return 0;}
NSInteger 不是类,而是基本数据类型的 typedef。有可能是 64 位的 long;也可能是 32 位的 int。
下表列出了 NSNumber 对象设置值的类方法、实例方法,以及检索这些值的实例方法:
String Objects
NSString 用于处理字符串对象。NSString 对象由 unichar 字符组成。Unichar 是符合 Unicode 标准的多字节字符。
More on the NSLog Function
输出 NSString 对象
NSString *str = @"Programming is fun.";NSLog(@"%@", str);
NSNumber 对象也可以使用 %@ 来输出
NSLog (@"%@", intNumber);
The description Method
description 方法与 Java 的 toString 方法一样。重写它可以让我们在调用 NSLog 时显示任何我们想要的内容。
下面是 NSString 类的 description 方法定义:
-(NSString *) description{ return [NSString stringWithFormat: @"%i/%i", numerator, denominator];}
可变对象 vs 不可变对象(Mutable Versus Immutable Objects)
NSString 与 Java 的 String 类型是一样的,创建的都是不可变对象。所谓不可变就是不能在这个对象实例中更改值,所作的任何更改都会产生新的对象。
不可变对象的好处
1、更好的性能,在 Java 中,存在一个称为常量池的内存区域,所有常量字符串都存储在这个区域,当新的String实例创建时,会首先去这个内存区域中查找是否存在相同的字符串常量,如果有,则将新String实例的指针指向这块内存。如果没有,则创建新的内存存储字符串常量。
2、线程安全,在多线程中,不可变对象是线程安全的。
3、安全检查
4、hashCode
5、类加载机制,类名也是字符串。
6、操作的便利性
使用一个字符串创建新的字符串:
res = [NSString stringWithString: str1];
连接两个字符串
res = [str1 stringByAppendingString: str2];
使用 isEqualToString 比较两个字符串是否相等:
if ([str1 isEqualToString: res] == YES) ...
使用 compare 比较两个字符串是否相等(大小写敏感):
NSComparisonResult compareResult = [str1 compare: str2];
使用 compare 比较两个字符串是否相等(大小写不敏感):
NSComparisonResult compareResult = [str1 caseInsensitiveCompare: str2];
字符串比较结果
使用 compare 或 caseInsensitiveCompare 比较字符串有三个结果:
- NSOrderedAscending 第一个字符串小于第二个字符串。
- NSOrderedSame 相等。
- NSOrderedDescending 第一个字符串大于第二个字符串。
转换为大写
res = [str1 uppercaseString];
转换为小写
res = [str1 lowercaseString];
NSRange 类型
NSRange 类型用来指定范围,NSString 中的一些方法会用到。NSRange 定义有两个成员 location 和 length。location 是起始索引数;length 是字符计数。
substringToIndex
创建一个子字符串,从首字符 0 开始,执行到索引数。
substringFromIndex
创建一个子字符串,从指定的索引开始,直到字母末尾。
substringWithRange
接收一个范围,并返回指定范围的字符,NSMakeRange 函数用于创建一个 NSRange,这个结果可以作为substringWithRange:方法的参数。
NSMakeRange(8, 6);
rangeOfString
在一个字符串中查找字符串。返回 NSRange 类型可以精确地指出字符串的位置。如果没有找到,则 NSRange 的 location 被设置为 NSNotFound。
range = [str rangeOfString: @"string"];
可变字符串
NSMutableString 用于创建可更改字符的字符串对象。它是 NSString 的子类。
一些 NSString 和 NSMutableString 的常用方法
数组对象
Foundation 数组是有序的对象集合。数组也存在可变数组和不可变数组。NSArray 是不可变数组;NSMutableArray 是可变数组。另外,NSArray 和 NSMutableArray 只能存储对象,简单类型是不可以的。
一下代码用于创建一个数组
[NSArray arrayWithObjects:@"January", @"February", @"March", @"April", ..., @"December", nil]
arrayWithObjects 方法可接受可变数目的参数。要标记参数列表的结束,最后一个值必须指定为 nil。
for ( i = 0; i < 12; i++ ) NSLog(@"%2i %@", i + 1, [monthName objectAtIndex:i]);
objectAtIndex 用于遍历数组,数组下标从0开始。
由于数组只能存储对象,所以,对于基本类型来说,需要使用对象类型,比如 NSNumber 可以用来存储整数。
NSMutableArray *primes = [NSMutableArray arrayWithCapacity: 20];[primes addObject: [NSNumber numberWithInteger:2]];[primes addObject: [NSNumber numberWithInteger:3]];
以上代码很好理解,没什么可说的。
- Objective-C 2.0 学习笔记十一(Number, Strings, and Collections)
- java笔记(十一):Collections
- Objective-C 2.0 学习笔记一(Objective-C 程序设计)
- 写具有Objective-C特征的Swift类—Swift学习笔记(二十一)
- Objective-C学习笔记(十一)——break和continue的使用方法
- Objective-C学习笔记(二十一)——函数的返回值与参数类型
- iOS学习(十一)Objective-C 自动释放池
- Objective-C 苹果开发文档 07 Values and Collections
- swift学习笔记-字符串和字符(Strings and Characters)
- Java学习笔记(4)Mathematical Functions, Characters, and Strings
- C语言程序学习(十一)笔记
- C学习笔记(十一)数组认知
- objective-c formate strings
- Objective-C学习笔记
- Objective-C 学习笔记
- Objective-C学习笔记
- objective c 学习笔记
- Objective-C 学习笔记
- Robert Scoble: 微软平板注定失败
- 关于RPC方式的C/S程序测试-01
- poj1836--lis
- abc
- sql server和sybase中通用的使用BCP倒出当前库中所有表的数据批处理脚本
- Objective-C 2.0 学习笔记十一(Number, Strings, and Collections)
- Hadoop权威指南学习(四)——MapReduce工作机制
- java中的访问控制
- Source Insight3.0: Linux源代码阅读的利器
- JavaScript 之 HelloWorld编写
- Context-Sensitive Help Provider in Wpf
- 同步/异步、阻塞/非阻塞的理解
- C++ 中 位拷贝与值拷贝的区别
- HSI、HSV、RGB、CMY、CMYK、HSL、HSB、Ycc、XYZ、Lab、YUV颜色模型(转)