黑马程序员技术交流社区

标题: foundation简介 [打印本页]

作者: Edware    时间: 2015-8-18 16:39
标题: foundation简介
1.Foundation框架介绍
什么是框架?
众多功能\API的集合
框架是由许多类、方法、函数、文档按照一定的逻辑组织起来的集合,以便使研发程序变得更容易在OS X下的Mac操作系统中大约有80个框架为所有程序开发奠定基础的框架称为Foundation 框架

Foundation框架的作用
     Foundation框架是Mac\iOS中其他框架的基础
     Foundation框架包含了很多开发中常用的数据类型:
        * 结构体
        * 枚举
        * 类

如何使用Foundation框架
     Foundation框架中大约有125个可用的头文件,作为一个简单的形式,可以简单地使用以下语句导入#import<Foundation/Foundation.h>因为Foundation.h文件实际上导入其他所有Foundation框架中的头文件

Foundation框架中的类
     Foundation框架允许使用一些基本对象,如数字和字符串,以及一些对象集合,如数组,字典和集合,其他功能包括处理日期和时间、内存管理、处理文件系统、存储(或归档)对象、处理几何数据结构(如点和长方形)
     Foundation框架提供了非常多好用的类, 比如
```
NSString : 字符串
NSArray : 数组
NSDictionary : 字典
NSDate : 日期
NSData : 数据
NSNumber : 数字
```

Foundation框架中的类都是以NS为前缀(Next Step的缩写)
乔布斯于1976年创立苹果公司
乔布斯于1985年离开苹果公司, 创立NeXT公司, 开发了Next Step操作系统
在开发Next Step操作系统过程中产生了Foundation框架
     1997年, 苹果公司收购NeXT公司,   乔布斯重返苹果公司(Mac系统就是基于Next Step系统)
     2007年, 苹果公司发布了iOS系统(iOS系统基于Mac系统)

---

2.Foundation框架常见错误
有时候会在不经意之间修改了系统自带的头文件, 比如NSString.h, 这时会出现以下错误:

解决方案很简单, 只需要删除Xcode的缓存即可
缓存路径是/Users/用户名/Library/Developer/Xcode/DerivedData(默认情况下, 这是一个隐藏文件夹)

要想看到上述文件夹, 必须在终端敲指令显示隐藏文件夹, 指令如下
显示隐藏文件 : defaults write com.apple.finderAppleShowAllFiles–bool true
隐藏隐藏文件 : defaults write com.apple.finderAppleShowAllFiles–bool false
    (输入指令后, 一定要重新启动Finder)
1.NSString基本概念
什么是NSString?
一个NSString对象就代表一个字符串(文字内容)
一般称NSString为字符串类
2.NSString创建方式

最直接的方式(常量字符串)
常量区中的字符串只要内容一致, 不会重复创建
NSString *str1 = @"lnj";
NSString *str3 = @"lnj";
NSLog(@"str1 = %p, str3 = %p", str1, str3);
输出地址一致

格式化的方式
堆区中得字符串哪怕内容一致, 也会重复创建
NSString *str2 = [NSStringstringWithFormat:@"lnj"];
NSString *str4 = [NSStringstringWithFormat:@"lnj"];
NSLog(@"str2 = %p, str4 = %p", str2, str4);
输出地址不一样

1.直接读写文件中的字符
- 从文件中读取

```
// 用来保存错误信息
NSError *error = nil;

// 读取文件内容
NSString *str = [NSStringstringWithContentsOfFile:@"/Users/LNJ/Desktop/lnj.txt" encoding:NSUTF8StringEncoding error:&error];

// 如果有错误信息
if (error) {
NSLog(@"读取失败, 错误原因是:%@", [error localizedDescription]);
} else { // 如果没有错误信息
NSLog(@"读取成功, 文件内容是:\n%@", str);
}
```

- 写入文件中

```
NSString *str = @"江哥";
BOOL flag = [strwriteToFile:@"/Users/LNJ/Desktop/lnj.txt" atomically:YES encoding:NSUTF8StringEncoding error:nil];
if (flag == 1)
{
NSLog(@"写入成功");
}
```

- 重复写入同一文件会覆盖掉上一次的内容

```
NSString *str1 = @"小哥";
BOOL flag = [str1 writeToFile:@"/Users/LNJ/Desktop/lnj.txt" atomically:YES encoding:NSUTF8StringEncoding error:nil];

NSString *str2 = @"大哥";
[str2writeToFile:@"/Users/LNJ/Desktop/lnj.txt" atomically:YES encoding:NSUTF8StringEncoding error:nil];

NSString *str = [NSStringstringWithContentsOfFile:@"/Users/LNJ/Desktop/lnj.txt" encoding:NSUTF8StringEncoding error:&error];
NSLog(@"str = %@", str);

输出结果:大哥
```
---

##2.NSURL简介
- 什么是URL
     URL的全称是Uniform Resource Locator(统一资源定位符)
     URL是互联网上标准资源的地址
互联网上的每个资源都有一个唯一的URL,它包含的信息指出资源的位置
根据一个URL就能找到唯一的一个资源

- URL的格式
基本URL包含协议、主机域名(服务器名称\IP地址)、路径
举例: http://www.520it.com/ios/images/content_25.jpg
可以简单认为: URL == 协议头://主机域名/路径

- 常见的URL协议头(URL类型)
     http\https :超文本传输协议资源, 网络资源
     ftp :文件传输协议
     file :本地电脑的文件

URL的创建
传入完整的字符串创建
```
NSURL *url = [NSURL URLWithString:@"file:///Users/LNJ/Desktop/str.txt"];
```
通过文件路径创建(默认就是file协议的)
```
NSURL *url = [NSURL fileURLWithPath:@"/Users/LNJ/Desktop/str.txt"];
```

3.使用NSURL读写字符串
从URL中读取

```
// 用来保存错误信息
NSError *error = nil;

// 创建URL路径
//    NSString *path = @"file://192.168.199.119/Users/LNJ/Desktop/lnj.txt";

//  本机可以省略主机域名
//    NSString *path = @"file:///Users/LNJ/Desktop/lnj.txt";
    NSURL *url = [NSURL URLWithString:path];

//  利用fileURLWithPath方法创建出来的URL默认协议头为file://
NSURL *url = [NSURL fileURLWithPath:@"/Users/LNJ/Desktop/lnj.txt"];

// 读取文件内容
NSString *str = [NSStringstringWithContentsOfURL:url encoding:NSUTF8StringEncoding error:&error];

// 如果有错误信息
if (error) {
NSLog(@"读取失败, 错误原因是:%@", [error localizedDescription]);
} else { // 如果没有错误信息
NSLog(@"读取成功, 文件内容是:\n%@", str);
}
```

- 写入URL中

```
NSString *str = @"江哥";
[strwriteToURL:[NSURL URLWithString:@"/Users/LNJ/Desktop/lnj.txt"] atomically:YES encoding:NSUTF8StringEncoding error:nil];

int main(intargc, constchar * argv[]) {

/*
     1.如何创建一个NSString对象, 字符串
     */

// 1.通过@""直接创建
// 如果通过@""创建字符串, 那么会将字符串放到常量区中
// 如果是字符串常量, 那么只要内容相同 , 不会重复创建
NSString *str1 = @"lnj";

// 2.通过alloc或者类工厂方法创建
// 如果是通过alloc或者类工厂方法创建, 那么会将字符串放到堆区中
//    NSString *str2 = [[NSStringalloc] initWithString:@"lnj"];
//    NSString *str3 = [NSStringstringWithFormat:@"lmj"];
//    NSString *str3 = [[NSStringalloc] initWithString:@"lmj"];
NSString *str3 = [NSStringstringWithFormat:@"age is %i", 10];


NSString *str4 = @"lnj";
NSLog(@"str1 = %p, str4 = %p", str1, str4);

//    NSString *str5 = [NSStringstringWithFormat:@"lmj"];
//    NSString *str5 = [[NSStringalloc] initWithString:@"lmj"];
NSString *str5 = [NSStringstringWithFormat:@"age is %i", 10];
NSLog(@"str3 = %p, str5 = %p", str3, str5);

return0;
}

int main(intargc, constchar * argv[]) {

/*
     file: 文件路径,
     encoding: 编码英文 iOS-5988-1 中文 GBK GBK2312 , 一般情况填写UTF-8
     error: 如果读取错误, 会将错误信息保存到error中 ,如果读取正确, 就没有error = nil     */
NSString *path = @"/Users/xiaomage/Desktop/课堂共享/day17/note/lnj.txt";
NSError *error = nil;

// 从文件中读取字符串
/*
NSString *str = [NSStringstringWithContentsOfFile:path encoding:NSUTF8StringEncoding error:&error];
if (error == nil) {

NSLog(@"str = %@", str);
}else
    {
NSLog(@"error = %@", [error localizedDescription]);
    }
    */
/*
    // 将字符串写入到文件中
NSString *str = @"iOS0601基础班";
    // atomically 如果传入YES, 字符串写入文件的过程中如果没有写完, 那么不会生成文件
    //            如果传入NO, 字符串写入文件的过程中如果没有写完, 会生成文件
NSString *path2 = @"/Users/xiaomage/Desktop/abc.txt";
    BOOL flag = [str writeToFile:path2atomically:YES encoding:NSUTF8StringEncoding error:nil];
NSLog(@"flag = %i", flag);
     */


return0;
}

作者: Edware    时间: 2015-8-18 16:41
自己的笔记总结,求指导。
作者: ycsyoung    时间: 2015-8-19 23:04
学习了学习了
作者: 毛强    时间: 2015-8-20 00:11
谢谢分享
作者: MoonLove    时间: 2015-8-20 13:06
不错,学习了

作者: wdcew    时间: 2015-8-20 13:21
可以,总结的不错!!!
作者: 15095185209    时间: 2015-8-20 14:07
加油!还在学习中!
作者: chensc    时间: 2015-8-20 22:01
学习学习!
作者: Edware    时间: 2015-8-24 17:20
其实就是字符串的操作,多看俩遍就好了。




欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2