OBJECTIVE-C编程(第2版)学习笔记3
来源:互联网 发布:软件项目报价表 编辑:程序博客网 时间:2024/06/06 09:14
可以像这样创建一个NSString实例:
NSString *lament = @"Why me!?";从以上这行代码中可以看到,我们并没有明确地发送消息给NSString类,让它创建一个实例。@". . ."是Objective-C语言中的一个缩写,代表根据给定的字符串创建一个NSString对象。我们称这种缩写为字面量语法(literal syntax)。创建的实例称为NSString的字面量实例,或者更通俗地称为NSString字面量。
NSString实例可以保存任意Unicode字符。如果需要插入非ASCII码字符,则可以使用\u,后面加上该字符的十六进制Unicode编码。例如,卡牌中的红心符号的十六进制Unicode编码是0x2661:
NSString *slogan = @"I \u2661 New York!";
由于NSString对象可以保存Unicode字符,所以可以处理不同语言的字符串,创建多语言的应用就更加方便。
我们经常需要创建动态字符串。也就是说,需要创建不清楚内容的字符串,该字符串的内容需要等到程序运行的时候才能知道。这时可以使用stringWithFormat:类方法来创建动态字符串:
NSString *dateString = [NSString stringWithFormat:@"The date is %@",now];stringWithFormat:方法后面跟着一个格式字符串作为参数,这个格式字符串带有一个格式说明符和一个变量,变量的值会被用来替换格式说明符。
NSString类很常用,因为它像其他Objective-C类一样,包含很多有用的方法。以下是一些常用的NSString方法。
获取字符串中字符的数量,可以使用length方法:
NSUInteger length;
这个方法会返回一个NSUInteger值,不带参数。NSUInteger是Foundation框架中的一个数字类型,它其实就等于无符号长整型。
NSUInteger charCount = [dateString length];如果要查看一个字符串是否和另一个字符串相等,则可以使用isEqualToString:方法:
BOOL isEqualToString:(NSString *)other;
该实例方法逐一检查两个字符串的字母是否相同。也就是将作为实参的字符串和接收isEqualToString:消息的字符串做比较。然后返回一个BOOL值,报告两个字符串是否相等。
if([slogan isEqualToString:lament]){ NSLog(@"%@ and %@ are equal",slogan,lament);}如果要把一个字符串变成大写形式,则可以使用uppercaseString方法:
NSString * uppercaseString;
NSString *angryText = @"That makes me so mad!";NSString *reallyAngryText = [angryText uppercaseString];
打开Xcode,选择Help - > Documentation and API Reference,打开Xcode的文档浏览窗口。
在顶部的搜索栏中,输入NSSting。
NSArray也是一个常用的Objective-C类。NSArray实例可以保存一组指向其他对象的指针。
#import <Foundation/Foundation.h>int main(int argc, const char * argv[]) { @autoreleasepool { //创建三个NSDate对象 NSDate *now = [NSDate date]; NSDate *tomorrow = [now dateByAddingTimeInterval:24.0*60.0*60.0]; NSDate *yesterday = [now dateByAddingTimeInterval:-24.0*60.0*60.0]; //创建一个数组包含这三个NSDate对象 NSArray *dateList = @[now, tomorrow, yesterday]; } return 0;}与NSString类似,NSArray也可以用字面量语法创建实例。数组的内容写在方括号里,使用逗号分隔,前方带有@符号,不必另外发送创建实例的消息。
NSArray的实例是无法改变的。一旦NSArray实例被创建后,就无法添加或删除数组里的指针,也无法改变数组的指针顺序。
NSArray中的指针是有序排列的,并可以通过相应的索引(index)来存取。索引以0为起始:索引0的位置保存第一个指针,索引1的位置保存第二个指针,依次类推。
如果要存取某个数组中的指针,则可以使用数组名加相应的索引,索引用方括号包围起来。
#import <Foundation/Foundation.h>int main(int argc, const char * argv[]) { @autoreleasepool { //创建三个NSDate对象 NSDate *now = [NSDate date]; NSDate *tomorrow = [now dateByAddingTimeInterval:24.0*60.0*60.0]; NSDate *yesterday = [now dateByAddingTimeInterval:-24.0*60.0*60.0]; //创建一个数组包含这三个NSDate对象 NSArray *dateList = @[now, tomorrow, yesterday]; //输出其中的两个对象 NSLog(@"The first date is %@",dateList[0]); NSLog(@"The third date is %@",dateList[2]); //包含多少个对象 NSLog(@"There are %lu dates",[dateList count]); } return 0;}
可以使用for循环来遍历数组。
#import <Foundation/Foundation.h>int main(int argc, const char * argv[]) { @autoreleasepool { //创建三个NSDate对象 NSDate *now = [NSDate date]; NSDate *tomorrow = [now dateByAddingTimeInterval:24.0*60.0*60.0]; NSDate *yesterday = [now dateByAddingTimeInterval:-24.0*60.0*60.0]; //创建一个数组包含这三个NSDate对象 NSArray *dateList = @[now, tomorrow, yesterday]; //遍历数组 NSUInteger dateCount = [dateList count]; for(int i = 0; i < dateCount; i++){ NSDate *d = dateList[i]; NSLog(@"Here is a date: %@",d); } } return 0;}由于程序员需要经常遍历数组,所以Objective-C就添加了一种简化的for循环语法,新的循环语法称为快速枚举(fast enumeration)。它能够高效的地遍历数组中的所有元素。使用快速枚举省去了对数组计数的麻烦。
#import <Foundation/Foundation.h>int main(int argc, const char * argv[]) { @autoreleasepool { //创建三个NSDate对象 NSDate *now = [NSDate date]; NSDate *tomorrow = [now dateByAddingTimeInterval:24.0*60.0*60.0]; NSDate *yesterday = [now dateByAddingTimeInterval:-24.0*60.0*60.0]; //创建一个数组包含这三个NSDate对象 NSArray *dateList = @[now, tomorrow, yesterday]; //遍历数组 for(NSDate *d in dateList){ NSLog(@"Here is a date: %@",d); } } return 0;}
NSMutableArray实例和NSArray实例类似,但是可以添加、删除或对指针重新进行排序。NSMutableArray是NSArray的子类。
使用NSMutableArray和NSMutableArray类的方法改写前面的程序,代码如下:
#import <Foundation/Foundation.h>int main(int argc, const char * argv[]) { @autoreleasepool { //创建三个NSDate对象 NSDate *now = [NSDate date]; NSDate *tomorrow = [now dateByAddingTimeInterval:24.0*60.0*60.0]; NSDate *yesterday = [now dateByAddingTimeInterval:-24.0*60.0*60.0]; //创建空数组 NSMutableArray *dateList = [NSMutableArray array]; //将两个NSDate对象加入新创建的数组 [dateList addObject:now]; [dateList addObject:tomorrow]; //将yesterday指针插入数组的起始位置 [dateList insertObject:yesterday atIndex:0]; //遍历数组 for(NSDate *d in dateList){ NSLog(@"Here is a date: %@",d); } //删除yesterday指针 [dateList removeObjectAtIndex:0]; NSLog(@"Now the first date is %@",dateList[0]); } return 0;}
上述程序使用了array类方法来创建NSMutableArray。这个方法会返回一个空数组,可以给这个空数组添加对象。使用alloc和init得到相同的输出结果:
NSMutableArray *dateList = [[NSMutableArray alloc] init];程序中使用了addObject:方法来给NSMutableArray添加对象。这个方法会在数组的尾部添加对象。如果要将对象添加到一个特定的索引上,则可以使用insertObject:atIndex:方法。随着对象的逐渐增加,数组也会随之变长来保存这些对象。
删除数组中的对象,可以使用removeObject:atIndex:方法,而数组对象的计数也会随之减少。例如,删除yesterday指针后,如果访问dateList数组中索引为2的对象,程序就会崩溃。
还有一点需要注意,使用快速枚举遍历NSMutableArray时,不能在枚举过程中增加或者删除数组中的指针。如果遍历时需要添加或删除指针,则需要使用标准的for循环。
还没有字面量语法的时候,开发者只能使用arrayWithObjects:类方法来创建NSArray实例:
//创建一个NSArray对象并包含之前创建的三个NSDate对象(nil是结束标记)NSArray *dateList = [NSArray arrayWithObjects:now, tomorrow, yesterday, nil];
结束处的nil告诉方法停止运行。所以,这个NSDate数列拥有三个指针对象。(如果没有写nil,则程序很可能会崩溃,编译器会警告这个错误。)
用来访问dateList数组中指针的语句称为下标。在还没有下标语法的时候,开发者一般使用ObjectAtIndex:方法来访问数组中的指针:
//打印NSDate对象NSLog(@"The first date is %@", [dateList objectAtIndex:0]);NSLog(@"The third date is %@", [dateList objectAtIndex:2]);
- OBJECTIVE-C编程(第2版)学习笔记3
- OBJECTIVE-C编程(第2版)学习笔记2
- OBJECTIVE-C编程(第2版)学习笔记1
- [学习笔记—Objective-C]《Objective-C-基础教程 第2版》第二章~第七章
- [学习笔记—Objective-C]《Objective-C-基础教程 第2版》第八章 Foudation Kit 介绍
- [学习笔记—Objective-C]《Objective-C-基础教程 第2版》第九章 内存管理
- [学习笔记—Objective-C]《Objective-C-基础教程 第2版》第十章 对象初始化
- [学习笔记—Objective-C]《Objective-C-基础教程 第2版》第十一章 属性
- [学习笔记—Objective-C]《Objective-C-基础教程 第2版》第十二章 类别
- [学习笔记—Objective-C]《Objective-C-基础教程 第2版》第十三章 协议
- 黑马程序员——Objective-C程序设计(第4版)学习笔记之02-Objective-C 编程环境概述——黑马 IOS 技术博客
- Objective-C编程(第3版)
- Objective-C基础教程(第2版)学习记录点滴
- [学习笔记—Objective-C]《Objective-C 程序设计 第6版》开始
- [学习笔记—Objective-C]《Objective-C 程序设计 第6版》第四章 数据类型和表达式
- [学习笔记—Objective-C]《Objective-C 程序设计 第6版》第六章 选择结构
- [学习笔记—Objective-C]《Objective-C 程序设计 第6版》第七章 类
- [学习笔记—Objective-C]《Objective-C 程序设计 第6版》第八章 继承
- 解决:错误1error MSB8031: Building an MFC project for a non-Unicode character set is deprecated
- Android学习路之SeekBar&RatingBar
- 关于eclipse中的web项目没有部署到tomcat中
- 第三章 列表
- C# 初探UI Automation
- OBJECTIVE-C编程(第2版)学习笔记3
- 关于NoSuchBeanDefinitionException: No bean named 'xxxx' is defined问题解决
- 【实践】RGW+Ganesha环境部署
- 单行函数简介
- History隐藏历史记录
- mybatis
- 算法概论8章,部分习题证明
- 深入理解JVM之类的加载机制
- 10个值得程序员关注的C语言开源项目