<span style="font-size:14px"一、Foundation简介
我们在写OC代码之前总要加一行代码#import <Foundation/Foundation.h>,这个的作用其实是将Foundation框架中的Foundation.h文件包含进代码内。那么Foundation究竟是什么呢?
Foundation 框架是苹果公司提供给开发人员,提高效率的的工作库,是IOS框架的基础。
Foundation中提供了了多类,定义在头文件中。例如NSString类。
Foundation框架中包含了很多开发中常用的数据类型:结构体、每句、类。
二、结构体
1、 NSRange(location, length):
表示的是范围:
NSRange r3 = NSMakeRange(2, 4);
2、 NSPoint\CGPoint
作用:表示平面的坐标,其实就是表示一个点
NSPoint p2 = CGPointMake(20, 20);
3.NSSize\CGSize
作用:表示平面的大小,有长和高两个属性。
NSSize s1 = CGSizeMake(100, 50);
4.NSRect\CGRect(CGPint CGSize)
对NSPoint和NSSize的整合
CGRect r1 = CGRectMake(0, 0, 100, 50)
三、NSString和NSMultableString
字符串存放在常量区,常量区特点是,一旦创建完成,就不能改变。
1. 字符串的创建
NSString *s1 = @"jack";
2. C和OC字符串互转
// C字符串 --> OC字符串
NSString *s4 =[[NSString alloc] initWithUTF8String:"jack"];
// OC字符串 --> C字符串
const char *cs= [s4 UTF8String];
3. 获取字符的范围
获取is的范围
NSRange range = [s1rangeOfString:@"is"];
4 字符串长度
string.lenght;
5 获取字符串中的字符
char c=[string charactorAtIndex:index];
6 通过拼接或子符串创建一个新字符串
NSString str = [NSStringstringWithFormat:@"%d%d",6,7];
NSString str = [NSStringstringWithString:@"sss"];
7 c语言中的字符串转换成OC中的字符串
NSString str = [NSStringstringWithUTF8String:"sss"];
8 字符串截取
NSString str = [string substringFromIndex:index];
NSString str = [string substringToIndex:index];
9 获取子串在字符串位置
NSRang rang = [String rangOfString:@“收索字符"];
if(rang.location==NSNodFound){
表示没有找到;
}
10 字符串转换
//转换成inter
[str interValue];
//转换成大小写
[str uppercaseString];
[str lowercaseString];
12 可变长度字符串
由于字符串是常量,一旦声明不可更改,OC提供NSMutableString对象
NSMutableString strMut = [NSMutableString string];
[strMut setString:@"字符串"]; //设置字符串
[strMut appendString:@"追加字符串"];//追加字符串
13. 字符串的判断
判断字符串是否为空
1 "==" 方式
if(str1 = str2 ){
}
通过==来判断字符串是否相等,是判断字符串的地址是否相等。
14. isEqualToString
if([str isEqualToString:str2]){
}
实现原理:
先判断字符串指向的地址是否相等,如果不等,就循环判断对于的字符是否相等
如果要判断两个字符串是否相等,一定要通过isEqualToString
三、 NSArray
NSArray :不可变数组
NSMutableArray :可变数组
1.NSArray的创建
*/
NSArray*array2 = [NSArray arrayWithObject:@"jack"];
// nil是数组元素结束的标记
NSArray*array3 = [NSArray arrayWithObjects:@"jack", @"rose", nil];
// [array2count];
//NSArray*array4 = [NSArray arrayWithObjects:@"jack", @"rose",@"4324324", nil];
// 快速创建一个NSArray对象
NSArray*array4 = @[@"jack", @"rose", @"4324324"];
/*
2.NSArray的元素个数
*/
NSLog(@"%ld", array3.count);
/*
3.NSArray中元素的访问
*/
NSLog(@"%@", [array3 objectAtIndex:1]);
//array3[1];
NSLog(@"%@", array3[0]);
2.可变数组的基本使用
void use3()
{
NSMutableArray*array = [NSMutableArray arrayWithObjects:@"rose", @"jim",nil];
// 添加元素
[arrayaddObject:[[Person alloc] init]];
[arrayaddObject:@"jack"];
// 删除元素
//[arrayremoveAllObjects];
// 删除指定的对象
// [arrayremoveObject:@"jack"];
[arrayremoveObjectAtIndex:0];
// 错误写法
// [arrayaddObject:nil];
NSLog(@"%@", array);
NSLog(@"%ld", array.count);
}
四、 NSSet
NSSet和NSArray的对比
1> 共同点
* 都是集合,都能存放多个OC对象
* 只能存放OC对象,不能存放非OC对象类型(基本数据类型:int、char、float等,结构体,枚举)
* 本身都不可变,都有一个可变的子类
2> 不同点
* NSArray有顺序,NSSet没有顺序
NSSet的基本使用
void test()
{
NSSet *s =[NSSet set];
NSSet *s2 =[NSSet setWithObjects:@"jack",@"rose",@"jack2",@"jack3",nil];
// 随机拿出一个元素
NSString *str= [s2 anyObject];
NSLog(@"%@", str);
//NSLog(@"%ld", s2.count);
}
五、NSDictionary\NSMutableDictionary
集合
1.NSArray\NSMutableArray
* 有序
* 快速创建(不可变):@[obj1, obj2, obj3]
* 快速访问元素:数组名[i]
2.NSSet\NSMutableSet
* 无序
3.NSDictionary\NSMutableDictionary
* 无序
* 快速创建(不可变):@{key1 : value1, key2 : value2}
* 快速访问元素:字典名[key]
基本使用:
void use()
{
/*
字典:
key ----> value
索引 ----> 文字内容
里面存储的东西都是键值对
*/
// NSDictionary *dict = [NSDictionarydictionaryWithObject:@"jack" forKey:@"name"];
// NSArray *keys = @[@"name",@"address"];
// NSArray *objects = @[@"jack",@"北京"];
// NSDictionary *dict = [NSDictionarydictionaryWithObjects:objects forKeys:keys];
/*
NSDictionary *dict = [NSDictionarydictionaryWithObjectsAndKeys:
@"jack", @"name",
@"北京", @"address",
@"32423434", @"qq",nil];*/
NSDictionary *dict = @{@"name" :@"jack", @"address" : @"北京"};
// id obj = [dictobjectForKey:@"name"];
id obj = dict[@"name"];
NSLog(@"%@", obj);
// 返回的是键值对的个数
NSLog(@"%ld", dict.count);
}
六、NSSNumber
因为很多类(如NSArray)都要求使用对象,而int不是对象。
NSNumber就是数字对象,我们可以使用NSNumber对象来创建和初始化不同类型的数字对象。
例如:
@20 将 20包装成一个NSNumber对像
将各种基本数据类型包装成NSNumber对象
@10.5;
@YES;
@'A'; // NSNumber对象
@"A"; // NSString对象
七、NSDate
NSDate类用于保存时间值,同时提供了一些方法来处理一些基于秒级别时差(TimeInterval)运算和日期之间的早晚比较等。
基本使用示例:
#import <Foundation/Foundation.h>
int main()
{
// 09/10/2011
NSString *time =@"2011/09/10 18:56";
NSDateFormatter*formatter = [[NSDateFormatter alloc] init];
formatter.dateFormat = @"yyyy/MM/dd HH:mm";
NSDate *date =[formatter dateFromString:time];
NSLog(@"%@", date);
return 0;
}
void date2string()
{
NSDate *date =[NSDate date];
// 日期格式化类
NSDateFormatter*formatter = [[NSDateFormatter alloc] init];
// y 年 M 月 d 日
// m 分 s 秒 H (24)时 h(12)时
formatter.dateFormat = @"yyyy-MM-dd HH:mm:ss";
NSString *str =[formatter stringFromDate:date];
NSLog(@"%@", str);
}
void use()
{
// 创建一个时间对象
NSDate *date =[NSDate date];
// 打印出的时候是0时区的时间(北京-东8区)
NSLog(@"%@", date);
NSDate *date2 =[NSDate dateWithTimeInterval:5 sinceDate:date];
// 从1970开始走过的秒数
NSTimeIntervalseconds = [date2 timeIntervalSince1970];
// [date2timeIntervalSinceNow];
}
七、 NSValue
我们可以使用NSValue来辅助我们实现一些简单数据结构的封装。
NSNumber之所以能包装基本数据类型为对象,是因为继承了NSValue。
例如:
/ 结构体--->OC对象
CGPoint p =CGPointMake(10, 10);
// 将结构体转为Value对象
NSValue *value =[NSValue valueWithPoint:p];
// 将value转为对应的结构体
//[value pointValue];