Foundation框架


1、常用函数:
NSRange(location, length): (没有发现返回-1)
赋值:

//  方法1
NSRange r = NSMakeRange(1, 2); // 创建NSRange结构体的函数NSMakeRange
// 方法2
NSString *s = @"abc";
NSRange r = [s rangeOfString:@"o"]; // NSString中求字符范围的方法rangeOfString:
NSPoint(x, y)/CGPoint(x, y):(开发中用CGPoint(因为跨平台)(iphone的坐标原点在左上角))
赋值:
// 方法1
NSMakePoint(1, 1);
// 方法2
CGPointMake(1, 2); // 最常用
CGPointZero; // 原点
NSSize/CGSize:尺寸
// 方法1
NSMakeSize(1, 1);
// 方法2
CGSizeMake(1, 1)
NSRect/CGRect:矩形
CGRectMake(0 , 0, 10, 10);
CGRectMake(CGPointZero, {10, 10});
将以上结构体转成字符串函数:
NSStringFromRange
NSStringFromPoint
NSStringFromSize
NSStringFromRect
一些常用函数:(CG开头的一部分在CoreGraphics框架中)
CGPonitEqualToPonit
CGRectEqualToRect
CGSizeEqualToSize
CGRectContainsPoint // 是否包含点
2、常用类:
NSString类 :(NSString,不可变字符串)
创建:
NSString *s1 = @"abc";
/* 对象方法 */
/*************************************************************/
// 输入自定义参数转化成字符串 ,类似fprintf
NSString *s2 = [[NSString alloc] initWithFormat:@"abc%d", 1];
/*************************************************************/
// C字符串转成OC字符串
NSString *s3 = [[NSString alloc] initWithUTF8String:"abc"];
// OC字符串转成C字符串
const char *cs = [s3 UTF8String];
/*************************************************************/
// 获取文件内容(NSUTF8StringEncoding,使用到中文可用的编码)
NSString *s4 = [[NSString alloc] initWithContentsOfFile:@"/Users/triplec/Desktop/1.txt" encoding:NSUTF8StringEncoding error:nil];
/*************************************************************/
// 获取资源内容
// URL : 资源路径(万能)
// 协议头://路径
// file://
// ftp://
// http://
// 有协议头
NSURL *url = [[NSString alloc] initWithString:@"file://Users/triplec/Desktop/1.txt"];
// 无协议头
NSURL *url2 = [NSURL fileURLWithPath:@"//Users/triplec/Desktop/1.txt"];
NSString *s5 = [[NSString alloc] initWithContentsOfURL:url encoding:NSUTF8StringEncoding error:nil];
/* 类方法 */(与上面的对象方法对应)
NSString *s2 = [NSString stringWithFormat:@"abc%d", 1];
NSString *s3 = [NSString stringWithUTF8String:"abc"];
...//每个对象方法名的init换成string(换成类名去除NS的小写)
NSURL *url = [NSURL URLWithString:@"file://Users/triplec/Desktop/1.txt"];
字符串操作
/* 将字符串写入文件 */
[@"abc" writeToFile:@"/Users/triplec/Desktop/1.txt" atomically:YES encoding:NSUTF8StringEncoding error:nil];
/* 将字符串写如URL */
NSURL *url = [NSURL fileURLWithPath:@"//Users/triplec/Desktop/1.txt"];
[@"abc" writeToURL:url atomically:YES encoding:NSUTF8StringEncoding error:nil];
/* 将字符串以特定字符切割 (切割后为NSArray)*/
NSArray *array = [s3 componentsSeparatedByString:@"b"];
NSMutableString类 :(NSMutableString,可变字符串)
NSMutableString *s1 = [NSMutableString stringWithFormat:@"abc"];
// 追加字符串
[s1 appendString:@"dfg"]; 
// 删除范围内的字符串
NSRange range = [s1 rangeOfString:@"b"];
[s1 deleteCharactersInRange:range]; 
NSString也有相似的方法:(不可变性质体现)
NSString *s2 = [NSString stringWithFormat:@"abc"];
NSString *s3 = [s2 stringByAppendingString:@"dfg"]; // 在原来字符串的基础上创建新的字符串,而不是更改原先的字符串

3、集合类 
OC数组只能存放OC对象,不能存放非OC对象类型,如int,struct,enum等
OC数组不能存放nil值,nil表示数组结束

NSArray类:(不可变数组)
创建NSArray对象:
NSArray *array1 = [NSArray arrayWithObject:@"abc"];
NSArray *array2 = [NSArray arrayWithObjects:@"abc", @"bcd", nil]; // nil表示数组元素结束标记
NSArray *array3 = @[@"abc", @"bcd"]; // 快速创建NSArray对象
数组操作
array2.count; // 返回元素个数
array2[1]; // 和c数组一样可以根据下标来获取对应位置元素

遍历数组

//方法1
for (int i = 0; i < array2.count; i++)
{
    NSLog(@"%@", array2[i]);
}

//方法2
for (id obj in array2) 
{
    NSUInteger idx = [array2 indexOfObject:obj];
    NSLog(@"%@", obj); // 打印元素
   if (1 == idx)
   {
	break;
   }
} // (使用break退出循环)
// 方法3
// 每遍历到一个元素就会调用一次block
// 并且当前元素和索引位置会当做参数传给block
[array enumerateObjectsUsingBlock:
^(id obj, NSUInteger idx, BOOL *stop)
{
   NSLog(@"%ld-%@", idx, obj); // 打印索引和元素
   if (1 == idx)
   {
	*stop = YES;
   }
}]; // 使用stop停止
// 方法4
NSEnumerator *en = [array objectEnumerator]; // 迭代器
id obj = nil;
while (obj = [en nextObject]) {
     NSLog(@"%@", obj);
}

NSMutableArray类:(可变数组)
创建可变数组
NSMutableArray *array = [NSMutableArray array];
可变数组操作
// 添加对象元素
[array addObject:@"abc"]; 
// 根据元素删除对应元素
[array removeObject:@"abc"];
// 删除所有对象元素
[array removeAllObjects];
//根据索引删除对象元素
[array removeObjectAtIndex:0];
以下代码错误:
NSMutableArray *array = @[@"abc", @"bcd"]; // 右边返回不可变数组,不能赋给可变数组
NSSet类:(无序,不可变)
//创建NSSet对象
NSSet *s = [NSSet setWithObjects:@"abc", @"bcd", nil];
// 随机拿出一个值
NSString *str = [s anyObject];
NSMuTableSet类:(无序,可变)
NSMuTableSet *s = [NSMuTableSet set];
// 添加元素
[s addObject:@"abc"];
//删除元素
[s removeObject:@"abc"];
NSSet和NSArray对比总结:
共同点

  • 都是集合,都能存放多个OC对象
  • 只能存放OC对象,不能存放非OC对象类型(基本数据类型:int、cahr、float等、结构体、枚举)
  • 本省本身都不可变,都有一个可变的子类
不同点
  • NSArray有顺序,NSSet无序
NSDictionary类:(不可变,无序,和C++的map挺像)
/* 
字典:
key --->value
索引--->文字内容
里面存储的东西都是键值对
不允许有相同的键,允许有相同的值
*/
// 创建:
NSDictionary *d = [NSDictionary dictionaryWithObject:@"school" forKey:@"place"];
// 获取:
id obj = [d objectForKey:@"place"];
因为NSDictionary不可变,所以可以通过数组添加多个key:
NSArray *keys = @[@"place", @"name"];
NSArray *objects = @[@"school", @"abc"];
NSDictionary *d = [NSDictionary dictionaryWithObjects:objects forKeys:keys];
// 或者
NSDictionary *d = [NSDictionary dictionaryWithObjectsAndKeys:
		   @"school", @"place",
		   @"name", @"abc"];

快速操作

// 快速创建
NSDictionary *d = @{@"place" : @"school", @"name" : @"abc"};
// 快速访问
id obj = d[@"place"];

返回键值对个数
d.count 
NSMutableDictionary类:(可变,无序)
// 创建:
NSMutableDictionary *d = [NSMutableDictionary dictionary];
// 添加
[d setObject:@"school" forKey:@"place"];
// 移除
[d removeObjectforKey:@"place"];
快速创建的基本都返回不可变,不能赋给可变的

字典的遍历

// 方法1
NSArray *keys = [d allKeys]; // 获取所有key
for (int i = 0; i < d,count; i++)
{
    NSLog(@"%@-%@", keys[i], d[keys[i]]); // 打印key和object
}
// 方法2
[d enumerateKeysAndObjectsUsingBlock:
^(id key, id obj, BOOL *stop) {
     NSLog(@"%@-%@", key, obj); // 打印key和object
}];
//方法3
NSEnumerator *key = [d keyEnumerator]; // 迭代器
for (id obj in key	)
{
     id value = [d objectForKey:obj];    
     NSLog(@"%@--%@", obj, value);
}

NSNumber类
// 创建
NSNumber *num = [NSNumber numberWithInt:1]; // 转换1为NSNumber对象
// 操作
int a = [num intValue]; // 将num转换为int
// 通过@将基本数据类型包装成一个NSNumber对象
@1; 
@1.1;
@'A';
@YES;
int a = 10;
@(a); 
NSNumber之所以能包装基本数据类型为对象,是因为继承了NSValue
包装结构体:
CGPoint p = CGPoint(1, 1);
//将结构体转为value对象
NSValue *v = [NSValue valueWithPoint:p];
//将value转为对应的结构体
[v pointValue];
NSDate类
// 创建
NSDate *d = [NSDate date]; // 执行这行代码的时间(格林威治时间)
NSDate *d2 = [NSDate dateWithTimeInterval:1 sinceDate:d]; // 比d晚5s
NSTimeInterval s = [d1 timeIntervalSince1970]; // 从1970开始走过的秒数

// Date转成NSString
NSDateFormatter *f = [[NSDateFormat alloc] init];
f.dateFormatter = @"yyyy-MM-dd HH:mm:ss";
NSString *s = [f stringFromDate:d]; // 将d转成yyyy-MM-dd HH:mm:ss格式的字符串

// NSString转成Date
NNString *s = @"2015/03/08 13:27";
NSDateFormatter *f = [[NSDateFormatter alloc] init];
f.dateFormat = @"yyyy/MM/dd HH:mm";
NSDate *d = [f dateFromString:s]; // 将格式为yyyy/MM/dd HH:mm转换成d



你可能感兴趣的:(Foundation框架)