Foundation框架是IOS开发和MAC开发的基础框架,其中包含了很多开发中经常用到的数据类型。
NSRange包含两个属性,location和length
typedef struct _NSRange {
NSUInteger location;
NSUInteger length;
} NSRange;
NSRange r1 = {2, 4}; // 不用
NSRange r2 = {.location = 2, .length = 4};// 不用
NSRange r3 = NSMakeRange(2, 4); // 掌握
NSString *str = @"my name is alin";
// 找到@"alin"在str中的位置
NSRange range = [str rangeOfString:@"alin"];
NSLog(@"location=%ld, length=%ld", range.location, range.length);
如果找不到,length=0,range=NSNotFound=-1
使用它们需要引用CoreGraphics框架
点击工程->Build phases->Link binary With Libraries
点击增加,搜索CoreGraphics框架
NSSize与NSRect和NSPoint有类似的定义和使用方法,下面以NSPoint为例来介绍
NSPoint在NSGeometry.h文件中的定义
typedef CGPoint NSPoint;
在CGGermetry.h中,CGPoint的定义如下
struct CGPoint {
CGFloat x;
CGFloat y;
};
CGPointMake(CGFloat x, CGFloat y) 或者
NSMakePoint(CGFloat x, CGFloat y)
NSStringFromPoint(NSPoint aPoint)
以CGPointZero表示,代表原点
bool CGPointEqualToPoint(CGPoint point1, CGPoint point2);
bool CGRectContainsPoint(CGRect rect, CGPoint point);
开发中常用的类有NSString,NSArray,NSSet,NSDictionary,NSDate。其中NSString、NSArray、NSSet和NSDictionary有可变类,如NSMutableString。
// 直接创建
NSString *s1 = @"jack";
// 基本已不使用
NSString *s2 = [[NSString alloc] initWithString:@"jack"];
// 通过格式化创建
NSString *s3 = [[NSString alloc] initWithFormat:@"age is %d", 10];
// C字符串转化为OC字符串
NSString *s4 = [[NSString alloc] initWithUTF8String:"jack"];
// OC字符串转化为C字符串
const char *cs = [s4 UTF8String];
// 从文件读取
NSString *s5 = [[NSString alloc] initWithContentsOfFile:@"/Users/apple/Desktop/1.txt" encoding:NSUTF8StringEncoding error:nil];
// 由URL创建,两种创建URL的方式
NSURL *url = [[NSURL alloc] initWithString:@"file:///Users/alin/Desktop/1.txt"];
NSURL *url = [NSURL fileURLWithPath:@"/Users/alin/Desktop/1.txt"];
NSString *s6 = [[NSString alloc] initWithContentsOfURL:url encoding:NSUTF8StringEncoding error:nil];
与上面对象方法对应,框架提供了有一样功能的类方法,开发中一般使用类方法。
上面是从文件读取字符串,如果想把字符串写进文件,使用
// 字符串写入文件
[@"要写入的字符串" writeToFile:@"/Users/alin/Desktop/my.txt"
atomically:YES encoding:NSUTF8StringEncoding error:nil];
atomically:YES : 表示如果中途写入失败,文件不会创建,安全性高。NO表示中途写入失败还会创建文件。
NSMutableString:代表可变字符串,创建后可以随时改变,与NSString不同的是,NSString里面的字符串一经初始化,就不可改变。
NSMutableString *s1 = [NSMutableString stringWithFormat:@"123"];
// 在字符串后添加字符串
[s1 appendString:@"456"];
// 删除指定范围的字符串”5”
[s1 deleteCharactersInRange:NSMakeRange(4,1)];
// 删除固定字符串”23”
NSRange range = [s1 rangeOfString:@"23"];
[s1 deleteCharactersInRange:range];
// 创建一个新字符串,原来的没改变
NSString *s2 = @"134";
NSString *s3 = [s2 stringByAppendingString:@"678"];
NSLog(@"%@",s3);
// NSArray是不可变数组,所以这个array永远是空数组
// NSArray *array = [NSArray array];
// 通过单个对象创建
NSArray *array2 = [NSArray arrayWithObject:@"alin"];
// 通过多个对象创建,nil是数组元素结束的标记
NSArray *array3 = [NSArray arrayWithObjects:@"alin", @"阿青", nil];
// 快速创建一个NSArray对象
NSArray *array4 = @[@"alin", @"阿青", @"阿婷"];
// 获取数组里面对象的个数
NSLog(@"%ld", array3.count);
// 通过objectAtIndex方法访问
NSLog(@"%@", [array3 objectAtIndex:1]);
// 通过下标快速访问
NSLog(@"%@", array3[0]);
使用for循环遍历:
for (int i = 0; i
使用for(... in ...)遍历:
for (id obj in array)
{
NSLog(@"%@", obj);
}
使用enumerateObjectsUsingBlock方法遍历:
// 每遍历一个对象,调用一次Block,并且将对象obj和对象的索引idx传递给Block
array enumerateObjectsUsingBlock:
^(id obj, NSUInteger idx, BOOL *stop) {
NSLog(@"%ld---%@", idx, obj);
// 可以控制停止遍历
if (idx == 1)
{
stop = YES;
}
}];
// 创建NSMutableArray
NSMutableArray *array = [NSMutableArray arrayWithObjects:@"rose", @"jim", nil];
// 添加元素
[array addObject:[[Person alloc] init]];
[array addObject:@"jack"];
// 删除所有元素
//[array removeAllObjects];
// 删除指定的对象
// [array removeObject:@"jack"];
[array removeObjectAtIndex:0];
// 错误写法
// [array addObject:nil];
// 错误写法, 因为@[]创建的是NSArray
NSMutableArray *array = @[@"jack", @"rose"];