黑马程序员-IOS-OC基础-Foundation

时间:2021-12-28 00:29:25

Foundation框架

一、Foundation框架简介

  * Foundation框架是其他所有iOS框架的基础

  * 要想使用Foundation框架中的数据类型,包含它的主文件即可
    #import <Foundation/Foundation.h>

  * 框架是由许多类、方法、函数和文档按照一定的逻辑组织起来的集合,以便使程序开发变得更容易。
  * 在Mac OS X系统下大约有90多个框架,这些框架可以用来开发应用程序,处理Mac的Address Book结构、刻录CD、播放DVD、使用QuickTime播放电影、歌曲,等等。

  * 为所有的程序开发奠定基础的框架称为Foundation框架。它允许使用一些基本对象,如数字和字符串,以及一些对象集合,如数组、字典和集合。其他功能包括处理日期和时间、自动化的内存管理、处理基础文件系统、存储(或归档)对象、处理集合数据类型(如点和长方形)。
  * Application Kit框架包含广泛的类和方法,他们用来开发交互式图形应用程序,使得开发文本、菜单、工具栏、表、文档、剪切板和窗口之类的过程变得十分简单。
  * 在Mac OS X系统中,属于Cocoa总的来说指的是Foundation框架、Application Kit宽假和名为Core Date的第三方框架。
  * 术语Cocoa Touch是指Foundation、Core Date和UIKit框架。

二、Foundation文档

  * 应该利用存储在系统中的Foundation框架文档。
  * 这些文档包含Foundation框架的所有类及其实现的所有方法和函数的描述。
  * 可以将Foundation框架文档的URL作为书签添加到浏览器的收藏夹中,这样更方便查找Foundation类的信息。

三、结构体的简单使用

//
// main.m
// 01-结构体
//
// Created by apple on 13-8-12.
// Copyright (c) 2013年 itcast. All rights reserved.
//

#import <Foundation/Foundation.h>

int main()
{
/*
NSRange(location length)
NSPoint\CGPoint
NSSize\CGSize
NSRect\CGRect (CGPint CGSize)
*/

// 使用这些CGPointEqualToPoint、CGRectContainsPoint等函数的前提是添加CoreGraphics框架
//

// NextStep Foundation


// 比较两个点是否相同(x、y)
BOOL b = CGPointEqualToPoint(CGPointMake(10, 10), CGPointMake(10, 10));
//CGRectEqualToRect(<#CGRect rect1#>, <#CGRect rect2#>)
//CGSizeEqualToSize(<#CGSize size1#>, <#CGSize size2#>)


// x (50, 150) y (40 , 90)
BOOL b2 = CGRectContainsPoint(CGRectMake(50, 40, 100, 50), CGPointMake(60, 45));

NSLog(@"%d", b2);

return 0;
}

void point()
{
CGPoint p1 = NSMakePoint(10, 10);
NSPoint p2 = CGPointMake(20, 20);// 最常用

NSSize s1 = CGSizeMake(100, 50);
NSSize s2 = NSMakeSize(100, 50);
CGSize s3 = NSMakeSize(200, 60);

CGRect r1 = CGRectMake(0, 0, 100, 50);

CGRect r2 = { {0, 0}, {100, 90}};

CGRect r3 = {p1, s2};

// 使用CGPointZero等的前提是添加CoreGraphics框架
CGRect r4 = {CGPointZero, CGSizeMake(100, 90)};


// CGSizeZero
// CGRectZero

// 表示原点
// CGPointZero == CGPointMake(0, 0)


// 将结构体转为字符串
//NSString *str = NSStringFromPoint(p1);

//NSString *str = NSStringFromSize(s3);

NSString *str = NSStringFromRect(r1);

NSLog(@"%@", str);


// NSLog(@"x=%f, y=%f, width=%f, height=%f", r1.origin.x, r1.origin.y, r1.size.width, r1.size.height);
}

//CGRect myRect(CGFloat x, CGFloat y, CGFloat width, CGFloat height)
//{
// CGRect rect;
// rect.origin.x = x;
// rect.origin.y = y;
// rect.size.width = width;
// rect.size.height = height;
//
// return rect;
//}

void range()
{
// @"i love oc" // love的范围

//NSRange r1 = {2, 4}; // 不用
//NSRange r2 = {.location = 2, .length = 4};// 不用
//NSRange r3 = NSMakeRange(2, 4); // 掌握
NSString *str = @"i love oc";

// 查找某个字符串在str中的范围
// 如果找不到,length=0,location=NSNotFound==-1
NSRange range = [str rangeOfString:@"java"];
NSLog(@"loc = %ld, length=%ld", range.location, range.length);
}

字符串的使用:

//
// main.m
// 02-NSString
//
// Created by apple on 13-8-12.
// Copyright (c) 2013年 itcast. All rights reserved.
//

#import <Foundation/Foundation.h>
/*
NSString : 不可变字符串

NSMutableString : 可变字符串
*/


int main()
{

NSMutableString *s1 = [NSMutableString stringWithFormat:@"my age is 10"];
// 拼接内容到s1的后面
[s1 appendString:@" 11 12"];

// 获取is的范围
NSRange range = [s1 rangeOfString:@"is"];
[s1 deleteCharactersInRange:range];

NSString *s2 = [NSString stringWithFormat:@"age is 10"];

NSString *s3 = [s2 stringByAppendingString:@" 11 12"];


NSLog(@"s1=%@, s2=%@", s1, s2);

return 0;
}

void stringExport()
{
// 字符串的导出
[@"Jack\nJack" writeToFile:@"/Users/apple/Desktop/my.txt" atomically:YES encoding:NSUTF8StringEncoding error:nil];


NSString *str = @"4234234";
NSURL *url = [NSURL fileURLWithPath:@"/Users/apple/Desktop/my2.txt"];
[str writeToURL:url atomically:YES encoding:NSUTF8StringEncoding error:nil];
}

void stringCreate()
{
/*
1.字符串的创建
*/
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];

// NSUTF8StringEncoding 用到中文就可以用这种编码
NSString *s5 = [[NSString alloc] initWithContentsOfFile:@"/Users/apple/Desktop/1.txt" encoding:NSUTF8StringEncoding error:nil];


// URL : 资源路径
// 协议头://路径
// file://
// ftp://
// http://weibo.com/a.png


// http://www.baidu.com

// NSURL *url = [[NSURL alloc] initWithString:@"file:///Users/apple/Desktop/1.txt"];
NSURL *url = [NSURL fileURLWithPath:@"/Users/apple/Desktop/1.txt"];

NSString *s6 = [[NSString alloc] initWithContentsOfURL:url encoding:NSUTF8StringEncoding error:nil];
NSLog(@"s6=\n%@", s6);


/*
一般都会有一个类方法跟对象方法配对
[NSURL URLWithString:<#(NSString *)#>];
[NSString stringWithFormat:@""];
[NSString stringWithContentsOfFile:<#(NSString *)#> encoding:<#(NSStringEncoding)#> error:<#(NSError *__autoreleasing *)#>];

*/

}

NSArray的使用:

//
// main.m
// 03-NSArray
//
// Created by apple on 13-8-12.
// Copyright (c) 2013年 itcast. All rights reserved.
//

#import <Foundation/Foundation.h>
#import "Person.h"


/*

NSArray :不可变数组


NSMutableArray : 可变数组
*/

int main()
{
// @[] 只创建不可变数组NSArray
/* 错误写法
NSMutableArray *array = @[@"jack", @"rose"];

[array addObject:@"jim"];
*/


//NSArray *array = @[@"jack", @"rose"];

return 0;
}

// 可变数组的基本使用
void use3()
{
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];


NSLog(@"%@", array);

NSLog(@"%ld", array.count);
}

// 遍历数组
void use2()
{
Person *p = [[Person alloc] init];

NSArray *array = @[p, @"rose", @"jack"];

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

// id obj代表着数组中的每一个元素
//int i = 0;
// for (id obj in array)
// {
// // 找出obj元素在数组中的位置
// NSUInteger i = [array indexOfObject:obj];
//
// NSLog(@"%ld - %@", i, obj);
// //i++;
//
// if (i==1)
// {
// break;
// }
// }

[array enumerateObjectsUsingBlock:

// 每遍历到一个元素,就会调用一次block
// 并且当前元素和索引位置当做参数传给block
^(id obj, NSUInteger idx, BOOL *stop)
{
NSLog(@"%ld - %@", idx, obj);


if (idx == 0)
{
// 停止遍历
*stop = YES;
}

}];


// void ^(myblock)(id, NSUInteger, BOOL *) = ^(id obj, NSUInteger idx, BOOL *stop)
// {
// NSLog(@"%ld - %@", idx, obj);
//
//
// if (idx == 0)
// {
// // 停止遍历
// *stop = YES;
// }
// };
//
// for (int i = 0; i<array.count; i++)
// {
// // 用来标记是否需要停止遍历
// BOOL isStop = NO;
//
// // 取出元素
// id obj = array[i];
//
// myblock(obj, i, &isStop);
//
//
// if (isStop)
// {
// break;
// }
// }

}

void use()
{
/*
int a = 5;

int ages[10] = {1, 90, 89, 17};

Person *p = [[Person alloc] init];
Person *persons[5] = {p, [[Person alloc] init]};
*/

// OC数组不能存放nil值
// OC数组只能存放OC对象、不能存放非OC对象类型,比如int、struct、enum等

// 这个array永远是空数组
// NSArray *array = [NSArray array];


/*
1.NSArray的创建
*/
NSArray *array2 = [NSArray arrayWithObject:@"jack"];

// nil是数组元素结束的标记
NSArray *array3 = [NSArray arrayWithObjects:@"jack", @"rose", nil];
// [array2 count];

//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]);
}

/*
作者:Romeo
描述:
时间:
文件名:Person.h
*/
#import <Foundation/Foundation.h>

@interface Person : NSObject

@end


 NSSetNSArray的对比

 1> 共同点

 * 都是集合,都能存放多个OC对象

 * 只能存放OC对象,不能存放非OC对象类型(基本数据类型:intcharfloat等,结构体,枚举)

 * 本身都不可变,都有一个可变的子类

 

 2> 不同点

 * NSArray有顺序,NSSet没有顺序

#import <Foundation/Foundation.h>

int main()
{
NSMutableSet *s = [NSMutableSet set];

// 添加元素
[s addObject:@"hack"];

// 删除元素
// [s removeObject:<#(id)#>];
return 0;
}

// set的基本使用
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);
}

集合

 1.NSArray\NSMutableArray

 * 有序

 * 快速创建(不可变):@[obj1, obj2, obj3]

 * 快速访问元素:数组名[i]

 

 2.NSSet\NSMutableSet

 * 无序

 

 3.NSDictionary\NSMutableDictionary

 * 无序

 * 快速创建(不可变):@{key1 : value1,  key2 : value2}

 * 快速访问元素:字典名[key]

#import <Foundation/Foundation.h>

int main()
{
NSArray *persons = @[
@{@"name" : @"jack", @"qq" : @"432423423", @"books": @[@"5分钟突破iOS编程", @"5分钟突破android编程"]},
@{@"name" : @"rose", @"qq" : @"767567"},
@{@"name" : @"jim", @"qq" : @"423423"},
@{@"name" : @"jake", @"qq" : @"123123213"}
];

//
// NSDictionary *jim = persons[2];


//
NSString *bookName = persons[0][@"books"][1];
NSLog(@"%@", bookName);
//NSArray *array = persons[0][@"books"];

//NSLog(@"%@", array);

// 先取出1位置对应的字典
// 再取出字典中qq这个key对应的数据
//NSLog(@"%@", persons[1][@"qq"]);

// NSLog(@"%@", jim);
return 0;
}

void use4()
{
// 字典不允许有相同的key,但允许有相同的value(Object)
// 字典的无序的
NSDictionary *dict = @{
@"address" : @"北京",
@"name" : @"jack",
@"name2" : @"jack",
@"name3" : @"jack",
@"qq" : @"7657567765"};

// NSArray *keys = [dict allKeys];
//
// for (int i = 0; i<dict.count; i++)
// {
// NSString *key = keys[i];
// NSString *object = dict[key];
//
//
// NSLog(@"%@ = %@", key, object);
// }


[dict enumerateKeysAndObjectsUsingBlock:
^(id key, id obj, BOOL *stop) {
NSLog(@"%@ - %@", key, obj);

// *stop = YES;
}];
}

void use3()
{
NSMutableDictionary *dict = @{@"name" : @"jack"};


[dict setObject:@"rose" forKey:@"name"];
}

void use2()
{
NSMutableDictionary *dict = [NSMutableDictionary dictionary];

// 添加键值对
[dict setObject:@"jack" forKey:@"name"];


[dict setObject:@"北京" forKey:@"address"];

[dict setObject:@"rose" forKey:@"name"];


// 移除键值对
// [dict removeObjectForKey:<#(id)#>];


NSString *str = dict[@"name"];


//NSLog(@"%@", str);

NSLog(@"%@", dict);


//NSLog(@"%@", @[@"jack", @"rose"]);
}

void use()
{
/*
字典:

key ----> value
索引 ----> 文字内容

里面存储的东西都是键值对


*/

// NSDictionary *dict = [NSDictionary dictionaryWithObject:@"jack" forKey:@"name"];


// NSArray *keys = @[@"name", @"address"];
// NSArray *objects = @[@"jack", @"北京"];

// NSDictionary *dict = [NSDictionary dictionaryWithObjects:objects forKeys:keys];


/*
NSDictionary *dict = [NSDictionary dictionaryWithObjectsAndKeys:
@"jack", @"name",
@"北京", @"address",
@"32423434", @"qq", nil];*/


NSDictionary *dict = @{@"name" : @"jack", @"address" : @"北京"};

// id obj = [dict objectForKey:@"name"];

id obj = dict[@"name"];

NSLog(@"%@", obj);



// 返回的是键值对的个数
NSLog(@"%ld", dict.count);
}

NSDate

#import <Foundation/Foundation.h>  

int main()
{
NSString *time = @"2011\09\10 18:56";

NSDateFormatter *formatter = [[NSDateFormatter alloc] init];
formatter.dateFormat = @"yyy/MM/dd HH:mm";

[formatter dateForString: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 stringFormDate:date];

NSLog (@"%@", str);
}

void use()
{
// 创建一个时间对象
NSDate *date = [NSDate date];
// 打印出的时候是0时区的时间(北京-东B区)
NSLog (@"%@", date);

NSDate *date3 = [NSDate dateWithTimeInterval:5 sinceDate:date];

// 从1970开始走过的秒数
NSTimeInteval seconds = [date2 timeIntervalSince1970];

// [date2 timeIntervalSinceNow];
}