《Objective-C基础教程》第8章 Foundation Kit介绍

第8章 Foundation Kit介绍

8.1 Foundation

Foundation AppKit(OS X)和UIKit(IOS)两个UI框架的基础,包含很多有用的、面向对象的简单类和数据类型,可在IOS和OS X应用程序中兼容。

8.3 一些有用的数据类型

8.3.1 NSRange

typedef struct _NSRange {
    NSUInteger location;
    NSUInteger length;
} NSRange;

8.3.2 几何数据类型

由Core Graphics(C)框架提供,用于进行2D渲染,带CG前缀,如CGPoint、CGSize、CGRect,用C结构体以提升性能。

8.4 字符串

8.4.1 创建字符串

最常用的莫过于直接把一个常量字符串付给一个变量,比如 :NSString * tmp = @”Hello, World!!” ;

其次是使用类方法 +(id) stringWithFormat:(NSString *) format,⋯;

比如:

int  h = 178;
NSString * height = [NSString stringWithFormat:@"Your height is %d cm",h ]
8.4.2 获取字符串的长度

​ - (unsigned int)length;

8.4.3 字符串比较

A: - (BOOL)isEqualToString:(NSString *)aString

两个字符串相同返回YES,不同返回NO。

B:- (NSComparisonResult)compare:(NSString *)aString

​ 其中NSComparisonResult定义如下:

typedef  enum _NSComparisonResult {
    NSOrderedAscending = -1,
    NSOrderedSame,
    NSOrderedDescending
    }NSComparisonResult;

​ 这个比价反映了两个字符串的大小关系,比如 [@”aardvark” compare:@”zygote”]将返回NSOrderedAscending。

C:不区分大小写的比较:compare:options:

options是一个位掩码,常用选项如下:

NSCaseInsensitiveSearch, 不区分大小写。
NSLiteralSearch, 进行完全比较,区分大小写。
NSNumericSearch.比较字符串的字符个数,而不是字符值。

​ 不区分大小写比较也可以用函数 - (NSComparisonResult)caseInsensitiveCompare:(NSString *)aString。

D:字符串中是否有别的字符串,字符串查找

- (BOOL)hasPrefix:(NSString *)aString  是否以一个字符串开头
- (BOOL)hasSuffix:(NSString *)aString  是否以一个字符串结尾。
- (NSRange)rangeOfString:(NSString *)aString 查找一个字符串的起始位置。如果没找到返回{NSNotFound,0
8.4.4 从一个字符串获取子字符串
- (NSString *)substringFromIndex:(NSUInteger)anIndex 从指定位置开始到字符串结束
- (NSString *)substringToIndex:(NSUInteger)anIndex       从字符串开始第一个到指定位置。
- (NSString *)substringWithRange:(NSRange)aRange    取一个字符串中间的一部分。
8.4.5 字符串连接
- (NSString *)stringByAppendingString:(NSString *)aString
- (NSString *)stringByAppendingFormat:(NSString *)format
8.4.6 可变字符串

NSString是不可变的,意味着一旦创建好,就不能再改变,不能对它删除或者重置。

Cocoa 提供了NSString的子类NSMutableString,可以实现可变字符串。NSMutableString常见方法。

+ (id)stringWithCapacity:(NSUInteger)capacity  创建一个字符串并指定最大长度。
- (void)appendString:(NSString *)aString  追加字符
- (void)appendFormat:(NSString *)format  按格式追加字符
- (void)deleteCharactersInRange:(NSRange)aRange  删除指定位置的字符。
- (void)insertString:(NSString *)aString atIndex(NSUInteger)anIndex   在指定位置插入字符
- (void)replaceCharactersInRange:(NSRange)aRange withString:(NSString *)aString替换指定位置的字符
- (void)setString:(NSString *)aString    重置字符串。

8.5 集合大家族

8.5.1 NSArray

NSArray只能存储Objective-C的对象,原始的C语言对象如int、float等以及nil(对象的零值或NULL值)不能存储。

+ (id)arrayWithObjects:(id)firstObj, ... 创建NSArray
- (NSUInteger)count 获取对象个数
- (id)objectAtIndex:(NSUInteger)index   通过索引获取数组中的一个对象
示例
NSArray * array = [NSArray arrayWithObjects:@"one",@"two",@"three", nil];
NSString * tmp = [array objectAtIndex:2];
//遍历数组
for (NSString * string in array) {
       NSLog(@"array:%@",string);
}
切分数组
NSString *tempString = [mutableArray componentsJoinedByString:@","];将array数组转换为string字符串
NSArray  *array = [str componentsSeparatedByString:@","];将string字符串转换为array数组
8.5.2 NSMutableArray

跟NSString和NSMutableString的关系一样,如果需要对数组的值进行删除或者重置操作,需要用到可变数组 NSMutableArray。

+ (id)arrayWithCapacity:(NSUInteger)numItems  创建一个指定初始化长度的数组。
- (void)addObject:(id)anObject 添加一个元素。
- (void)insertObject:(id)anObject atIndex:(NSUInteger)index  在指定位置添加一个元素。
- (void)removeObjectAtIndex:(NSUInteger)index  删除一个数组元素

创建数组指定的参数并不是说数组的最大容量,系统只是根据这个值来预分配一个初始的内存大小,添加更多的元素也是允许的。

8.5.3 NSEnumerator

表示集合中迭代出的对象。支持Mac OS X10.4或更早的系统。

- (NSEnumerator *)objectEnumerator; 创建枚举器
- (id) nextObject; 获取下一个对象,返回nil时循环结束
//通过枚举器来遍历数组
NSEnumerator *arrayEnum = [_array objectEnumerator];
id object = nil;
//枚举器是通过nextobject来获取到对应的对象,如果没有得到对象,则返回nil,while条件不成立,则结束。
while (object = [arrayEnum nextObject]) {
    NSLog(@"%@",object);
}

//获取数组的逆序枚举器
NSEnumerator *reverseArrayEnum = [_array reverseObjectEnumerator];
while (object = [reverseArrayEnum nextObject]) {
    NSLog(@"%@",object);
}
8.5.4 快速枚举

性能更快

for (NSString * string in array) {
       NSLog(@"array:%@",string);
}
8.5.5 代码块枚举

并发执行

[array enumerateObjectsUsingBlock:^(NSString* obj, NSUInteger idx, BOOL *stop) {
    NSLog(@"%@",obj);
}];
8.5.6 NSDictionary
+ (id)dictionaryWithObjectsAndKeys:... 创建一个字典。
- (id)objectForKey:(id)aKey 获取相应关键字的值。

NSMutableDictionary

+ (id)dictionaryWithCapacity: (NSInteger)numItems 创建一个字典
- (void)setObject:(id) anObject forKey:(id)aKey   增加一个元素,若该key存在,则替换
- (void)removeObjectForKey: (id)aKey删除一个元素。

8.6 其他数值

集合只能存储Objective-C对象,不能直接存储基本类型的数据,需要对其进行封装。

8.6.1 NSNumber

封装基本数据类型(也可以使用字面量语法)

+ numberWithChar:
+ numberWithFloat:
+ numberWithInt:
+ numberWithBool:

对应的获得方法

– charValue
– floatValue
– intValue
– boolValue
- stringValue
8.6.2 NSValue

封装任意值

+ (NSValue *)valueWithBytes:(const void *)value objCType:(const char *)type

传递的第一个参数是你想要包装数值的地址。第二个参数是描述这个数据类型的字符串,使用@encode指令接受类型名称生成字符串。

- (void)getValue:(void *)buffer;

示例

NSValue *value = [NSValue valueWithBytes:&result objCType:@encode(int)];
[value getValue:&result];
8.6.3 NSNull

nil在集合中表示结束,所以用NSNull表示集合元素为空

+ (NSNull *)null;
[profile setObject:[NSNull null] forKey:@"phoneNumber"];
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

这波lucio来全学了

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值