——Java培训、Android培训、iOS培训、.Net培训、期待与您交流! ——
常用结构体
NSRange
查找某个字符串在 str 中的范围
Range 结构体 有两个元素
length 和 location
快速定义 NSRange :
NSRange r = NSMakeRange(2, 4);
获得字符串的 Range 信息
NSString *s = @“hello world!”;
NSRange r = [s rangOfString:@“ll”];
结果 :
r.length = 2
r.location = 2
若找不到 :
length = 0
location = NSNotFound ( 实际值为 -1 )
CGpoint/ NSpoint
CGpoint = NSpoint
CGpoint 是跨平台的,在开发中常用.
快速创建方法 :
CGPoint p1 = CGPointMake(10,9); //开发中常用
NSPoint p2 = NSMakePoint(120,20);
CGSize/NSSzie
NSSzie s1 = CGSizeMake(100, 50);
NSSzie s2 = NSMakeSize(20,20);
结构体打印
NSRect r1 = CGRectMake(0, 0, 100, 50);
NSString *str = NSStringFromRect(r1);
NSLog(@"%@", str);
打印结构体的常用方法是先转换成字符串再打印
补充
CGPointZero == CGPointMake(0,0); 这种便捷的方法比较常用
CGPointEqualToPoint(p1 ,p2); 比较两个点是否相同
CGRectContainsPoint(Rect, Point) 判断矩形中是否包含这个点
CG 开头的函数依赖于 CoreGraphics 框架,而一般默认就有这个框架
这些函数功能的声明在 Foundation 框架中, 定义在 CoreGraphics 框架中.
Foundation 常用类
NSString
—>NSMutableString
NSArray
—>NSMutableArray
NSSet
—>NSMutableSet
NSDictionary
—>NSMutableDictionary
以上都是集合类 . 用法都非常类似.
NSString
不可变字符串的创建
NSString *s1 = @"234234";
NSString *s2 = [[NSString alloc] initWithSting:@”123123”]
NSString *s3 = [[NSSting alloc] initWithFormat:@“age is %d”, 10];
转换
NSString *s4 = [[NSString alloc] initWithUTF8String:”jack”]; // c 字符串—>oc 字符串
const char *cs = [s4 UTF8String]; //oc字符串转 c 字符串
// 文件内容转 NSString
NSString *s5 = [[NSString alloc] initWithContentsOfFile:@“文件路径” encoding:NSUTF8StringEncoding error:nil];
// NSUTF8StringEncoding 用到中文就可以用这种方法
NSMutableString : 可变字符串
NSString 的子类
创建和使用
NSMutableString *s1 = [NSMutableString stringWithFormat:@"age is 10"];
[s1 appendString:@“ 11 12”]; // 字符串拼接
[s1 deleteCharactersInRange:NSMakeRange(4, 2)]; // 删除指定范围字符串
比较稳妥的方法
NSRange range = [s1 rangeOfString:@"is"];
[s1 deleteCharactersInRang:range];
创建一个新的拼接后的字符串
NSString *s2 = [NSString stringWithFormat:@"age is 10"]
NSString *s3 = [s2 stringByAppendingString:@“ 11 12”];
URL
URL : 资源路径
协议头 :// 路径
file :// 本地资源
ftp ://
http ://weibo.com/a.png
URL 使用方法
NSURL *url = [[NUSRL alloc] initWithString:@"file:// /Users/apple/Desktop/1.txt"]; // 字符串转 URL
NSString *s6 = [[NSString alloc] initWithContentsOfURL:url encoding:NSUTF8StringEncoding error:nil]; // URL 链接中的资源内容转 NSString
/*
一般都会有一个类方法跟对象方法配对
[NSString stringWithFormat:@“”]; 用类方法来初始化会更方便
[NSString stringWithContentsOfFile: ………];
[NSURL URLWithString:(NSString *)];
[NSURL fileURLWithPath:@“/Users/apple/Desktop/1.txt”];
*/
NSArray
oc 数组只能存放 oc 对象.不能存放非 oc 对象类型.比如 int/ struct/ enum 等就不能存放
创建 oc 数组
NSArray *array = [NSArray arrayWithObject:@"jack"]; // 就一个元素
NSArray *array2 = [NSArray arrayWithObject:@"jack",@"rose",nil]; // nil 是数组结束的标记
NSLog(@“%ld”, array2.count);
打印数组元素
NSLog(@"%@", [array2 objectAtIndex:1];
NSLog(@"%@", array2[1]); 语法糖
快速创建一个 NSArray 对象 只能创建不可变数组
NSArray *array3 = @[@"jack",@"rose",nil];
快速遍历oc 数组
for (int i = 0; i<array.count; i++)
{
NSLog(@"%@", array[i]);
}
// id obj代表着数组中的每一个元素
for (id obj in array)
{
NSLog(@"%@", obj);
}
// 找出 obj 元素在数组中的位置
for (id obj in array)
{
NSUInteger i = [array indexOfObject:obj];
NSLog(@"%ld - %@", i, obj)
}
// 使用代码块. 每遍历到一个元素,就会调用依次 block
// 并且当前元素和索引位置当做参数传给 block
[array enumerateObjectsUsingBlock:
^(id obj, NSUInteger idx, BOOL *stop)
{
NSLog(@"%ld - %@", idx, obj);
if (idx == 1)
{
*stop = YES; // stop 为停止指针,退出条件
}
}];
NSMutableArray
NSMutableArray *array = [NSMutableArray array];
[array addObject:@"jack"]; // 可以添加任意对象
删除所有元素
[array removeAllObjects];
删除指定的对象
[array removeObject:@“jack”];
[array removeObjectIndex:2];
NSSet/NSMutableSet
NSSet中的元素没有顺序
NSSet *s = [NSSet set];
NSSet *s2 = [NSSet setWithObject:@"jack",@"rose",nil];
NSLog(@“%ld”, s2.count];
随机拿出一个元素
NSString *str = [s2 anyObject];
NSSet 和 NSArray 的对比
1> 共同点
* 都是集合,都能存放多个 oc 对象
*只能存放 oc 对象,不能存放非 oc 对象类型
*本身都不可变,都有一个可变的子类
2>不同点
*NSArray 是有序的, NSSet 是无序的.
NSDictionary
key ----> value
索引 ----> 文字内容
字典里面存的东西都是键值对.
创建与查看 :
// NSDictionary *dict = [NSDictionary dictionaryWithObjects:@"jack" forKeys:@"key"];
NSDictionary *dict = @{@"name": @"jack",@"address" : @"北京"};
// id obj = [dict objectForKey:@"name"];
id obj = dict[@"name"];
NSLog(@"%@", obj);
NSLog(@"%ld", dict.count); // 返回键值对的个数
遍历字典
NSDictionary *dict = @{
@"name" : @"jack",
@"address" : @"北京",
@"qq" : @"123124"};
[dict enumerateKeysAndObjectsUsingBlock:
^(id key, id obj, BOOL *stop) {
NSLog(@"%@ - %@", key, obj);
}];
NSMutableDictionary
NSMutableDictionary *dict = [NSMutableDictionary dictionary];
[dict setObject:@"jack" forKey:@"name"];
[dict setObject:@"北京" forKey:@"adress"]; // 重复的键值对会覆盖
[dict removeObjectForKey:@"name"]; //remove
oc 的方法都用英文写的非常直观了,所以英文好的会几乎都能猜出来它的方法.
所以,好好学习英语吧.
小结
1.NSArray\NSMutableArray
*有序
*快速创建(不可变): @[]
*快速访问元素: 数组名[i]
2.NSSet\NSMutableSet
*无序
3.NSDictionary\NSMutableDictionary
*无序
*快速创建(不可变): @{key1 : value1, key2 : value2, key3 :value3}
*快速访问元素: 字典名[key]
NSNumber
因为 oc 数组中不能存放除对象外的数据
所以 用 NSNumber 来进行转换
NSNumber *num = [NSNumber numberWithInt:10];
int a = [num intValue];
语法糖来了,编译器特性让我们写程序方便不少.
@20 将 20 包装成一个 NSNumber 对象
用法如下
@YES
@‘A’
@“A”
int age = 100;
@(age); 将 age 变量包装成 NSNumber 对象
NSValue
NSNumber 之所以能包装基本数据类型为对象,是因为继承了 NSValue.
NSValue 还能放 NSNumber 放不了的结构体等
结构体—> oc 对象
CGPoint p = CGPointMake(10, 10);
NSValue *value= [NSValue valueWithPoint:p];
—> 结构体
[value pointValue];
NSDate
创建一个时间对象
NSDate *date = [NSDate date];
创建的内容就是当前时间
主要用法 :
// 日期格式化类
NSDateFormatter *formatter = [[NSDateFormatter alloc] init];
formatter.dateFormat = @"yyyy-MM-dd HH:mm:ss";
// H (24) 时制 h (12) 时制
获得当前格式的时间 String
NSString *str = [formatter stringFromDate:date];
String —> date
NSString *time = @“2012/12/1 18:40”;
NSDateFormatter *formatter = [[NSDateFormatter alloc] init];
formatter.dateFormat = @"yyyy/MM/dd HH:mm";
NSDate *date = [formatter dateFromString:time];