您当前的位置: 首页 > 

white camel

暂无认证

  • 4浏览

    0关注

    442博文

    0收益

  • 0浏览

    0点赞

    0打赏

    0留言

私信
关注
热门博文

Objective - C 一一 Foundtion框架

white camel 发布时间:2017-07-27 21:12:44 ,浏览量:4

Foundation框架

1. 什么是框架

众多功能API的集合

框架是由许多类、方法、函数、文档按照一定的逻辑组织起来的集合,以便为开发程序提供便利.

在OSX下的Mac系统有大约80多个框架,但是Foundation框架是Mac\iOS中其他框架的基础,所以掌握Foundation框架是开发ios程序必不可少的

2. Foundation框架有什么作用?

> Foundation框架是Mac\iOS中其他框架的基础框架

> Foundation框架包含许多开发中常用的数据类型: 结构体、枚举、类等.

3. 如何使用Foundation框架

> 要想使用Foundation框架中的功能,导入它的主头文件

#import 即可.

4. Foundation框架中常用的类

NSString : 字符串

NSArray : 数组

NSDictionary : 字典

NSDate : 日期

NSData : 数据

NSNumber : 数字

Foundation框架中的类都是以NS为前缀(Next Step的缩写)

NSString类

1. 什么是NSString类

> 一个NSString对象就代表一个字符串

> 一般称NSString为字符串类

2. 如何创建NSString对象?

创建字符串有多种方式,通过不同的方式创建字符串,字符串对象存储的位置也不一样.

> 如果是通过字符串常量创建NSString对象,那么字符串对象存储在常量区中.

> 如果是通过alloc initWithFormat / stringWithFormat创建,那么字符串对象存储在堆中.

注意:

> 不同平台的存储方式也不一样,如果是Mac平台系统会自动对字符串对象进行优化,但是如果是iOS平台就是两个对象

> 不同的编译器存储的方式也不一样,如果是Xcode6以下并且是在iOS平台,那么每次alloc都会创建一个新对象,如果是在

Xcode6以上那么alloc多次指向同一块存储空间

1): 通过字符串常量创建NSString对象(通过@""直接创建 ).

注意: 如果通过字符串常量创建对象,并且字符串常量的内容一致,那么如果创建多个字符串对象,多个对象指向同一存储空间.

NSString *str1 = @"gzy";
NSString *str11 = @"gzy";
NSLog(@"str1 = %p,str2 = %p",str1,str11)

2):  通过alloc init 创建

注意: 只要调用alloc就会在堆内存中开辟一块存储空间

NSString *str2 = [[NSString alloc]initWithFormat:@"gzy"];

3): 通过类工厂方法创建/ stringWithFormat

注意: 类工厂方法内部实质是封装了alloc init,所以通过类工厂方法创建, 那么会将字符串放到堆区中

NSString *str3 = [NSString stringWithFormat:@"zs"];

一般情况下,只要通过alloc或者类工厂方法创建的对象,每次都会在堆内存中开辟一份新的存储空间,但是如果是通过alloc的initWithString方法除外,因为这个方法是通过copy返回一个字符串对象给我们, 而copy又分为深拷贝和浅拷贝,如果是深拷贝会创建一个新的对象,如果是浅拷贝不会创建一个新的对象,而是直接返回被拷贝的对象的地址给我们

NSString *str4 = [[NSString alloc]initWithString:@"ls"];

3. 从文件中读写字符串 > 从文件中读取字符串( stringWithContentsOfFile)

参数解释:

file: 文件路径,

     encoding: 编码英文 iOS-5988-1中文 GBK GBK2312 ,一般情况填写UTF-8

     error: 如果读取错误,会将错误信息保存到error中 ,如果读取正确,就没有error = nil

     注意:以后在OC方法中但凡看到XXXofFile的方法,传递的一定是全路径(绝对路径)

    NSString *path = @"/Users/sunny/Desktop/默默/520/note/gzy.txt";
    NSError *error = nil;

    NSString *str = [NSString stringWithContentsOfFile:path encoding:NSUTF8StringEncoding error:&error];
    if (error == nil) {
        
        NSLog(@"str = %@", str);
    }else
    {
	NSLog(@"error = %@", [error localizedDescription]);

> 将字符串写入到文件中(writeToFile)

 NSString *str = @"你好世界!";
    // atomically 如果传入YES, 字符串写入文件的过程中如果没有写完, 那么不会生成文件
    //            如果传入NO, 字符串写入文件的过程中如果没有写完, 会生成文件
    NSString *path2 = @"/Users/xiaomage/Desktop/abc.txt";
    BOOL flag = [str writeToFile:path2 atomically:YES encoding:NSUTF8StringEncoding error:nil];
    NSLog(@"flag = %i", flag);

4. 从URL中读写字符串

1) : 什么是URL?

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

2): URL格式

URL = 协议头://主机名称/路径

3): 如何创建URL

  > 通过alloc 或者 类工厂方法创建

NSURL *url = [NSURL URLWithString:@"file:///Users/james/Desktop/str.txt"];
NSURL *url = [[NSURL alloc] initWithString:@"file:///Users/james/Desktop/str.txt"];

注意: 

       1. 如果加载的资源是本机上的资源,那么URL中的主机地址可以省略,虽然主机地址可以省略,但是需要注意,文件路劲中最前面的/不能省略,文件路径最前面的/代表根路径

2.如果使用URLWithString方法来创建URL,必须在创建URL之前先对字符串中的中文进行处理,进行百分号编码

NSString *path =@"/Users/sunny/OC代码/Function/字符串读写2/gzy.txt";

path = [path stringByAddingPercentEscapesUsingEncoding:NSUTF8StringEncoding];

NSURL *url = [NSURL URLWithString:path];

> 通过文件路径创建(默认就是file协议的)

NSURL *url = [NSURL fileURLWithPath:path];

注意 :

1. 如果是通过NSURL的fileURLWithPath:方法创建URL,那么系统会自动给我们传入的字符串添加协议头(file://),

以字符串中不需要再写file://

2. 开发中一般情况下,如果是访问本机的资源,创建URL的时候,建议使用fileURLWithPath方法创建

     因为url不支持中文,如果URL中包含中文,那么无法访问;但是如果是通过fileURLWithPath方法创建URL,

哪怕URL中包含中文也可以进行访问,系统内部会自动对URL中包含的中文进行处理

URLWithString: 方法不支持中文,所以无法成功创建URL,必须先对路径字符串进行编码

fileURLWithPath: 方法支持中文,并且省略协议头,但是只能获取本地方法

1.  文件读取字符串(stringWithContentsOfURL)

//根据URL加载文件中的字符串

NSString *str = [NSString stringWithContentsOfURL:url encoding:NSUTF8StringEncoding error:nil];

2. 将字符串写入到文件(writeOfURL)

NSString *str = @"gzy";
NSString *path = @"/Users/NJ-Lee/Desktop/未命名文件夹/abc.txt";
NSURL *url = [NSURL fileURLWithPath:path];
[str writeToURL:url atomically:YES encoding:NSUTF8StringEncoding error:nil];

注意点:

如果多次往同一个文件中写入内容,那么后一次的会覆盖前一次的

方法名中没有file,路径中要添加上file协议头,如果方法名中有file,路径中就不需要file协议头

5. 字符串的比较.

1. 如何比较两个字符串的 "内容" 是否相同?(isEqualToString)

BOOL flag = [ str1 isEqualToString: str2];

   NSLog(@”flag = %i”, flag);

2.  如何比较两个字符串的”地址”是否相同? (==)

flag = (str1 == str2); 

NSLog(@”flag = %i”, flag);

3. 如何比较字符串的大小?(compare)

三个枚举常量:

NSOrderedAscending 前面小于后面的

NSOrderedSame 两个字符串相等

NSOrderedDescending 前面大于后面的

4. 忽略大小写进行比较(caseInsensitiveCompare)

[str1 caseInsensitiveCompare:str2]

6. 字符串搜索(字符串判断)

1. 判断是否以什么开头(hasPrefix)

本质: 就是从字符串的第一个字符开始匹配,只要不匹配就返回0

NSString *str =@"http://www.520it.com/img/lnj.gif";

if ([str hasPrefix:@"http://"]) {
   NSLog(@"是一个URL");
}else{	
   NSLog(@"不是一个URL");
}

2. 判断是否以什么结尾( hasSuffix)

本质:就是从字符串的最后一个字符开始匹配,只要不匹配就返回NO

if ([str hasSuffix:@".gif"]) {
  NSLog(@"动态图片");
}else{
  NSLog(@"不是动态图片");
  }

3. 判断字符串中是否包含指定字符串.(rangeOfString)

注意:

只要str中包含该字符串,那么就返回字符串在str中的起始位置,以及字符串的长度

    如果str中没有需要查找的字符串,那么返回的range的length = 0,location = NSNotFound

NSRange range = [str rangeOfString:@"520"];
   if (range.location == NSNotFound) {
      	  NSLog(@"str字符串中没有需要查找的内容!");
   }else{
    	  NSLog(@"str字符串中有需要查找的内容!");
    	  NSLog(@"location = %lu,length = %lu",range.location,range.length);
   }

7. NSRange
NSRange是Foundation框架中比较常用的结构体, 它的定义如下:

typedef struct _NSRange {

    NSUInteger location;

    NSUInteger length;

} NSRange;

// NSUInteger的定义

typedef unsignedint NSUInteger;

  • NSRange用来表示事物的一个范围,通常是字符串里的字符范围或者数组里的元素范围
  • NSRange有2个成员
  • NSUIntegerlocation : 表示该范围的起始位置
  • NSUIntegerlength : 表示该范围内的长度
  • 比如@“I love iOS”中的@“iOS”可以用location为7,length为3的范围来表示

NSRange的创建

  • 有3种方式创建一个NSRange变量

NSRange : 位置 / 长度
>1.

NSRange range = {6,3};

>2.

    NSRange range;

    range.location =6;

    range.length =3;

>3.

     只要是OC提供的结构体,一般都可以使用NSMakeXXX来创建

    NSRange range = NSMakeRange(6,3);

7. 字符串截取
1.
NSString *str = @" 贵阳 " ;

1.动态获取截取的起始位置

NSUInteger location = [str rangeOfString:@">"].location + 1;

2.动态获取截取的长度

注意:rangeOfString是从左至右的开始查找,只要找到就不找了

      NSUInteger length = [str rangeOfString:@"

关注
打赏
1661428283
查看更多评论
立即登录/注册

微信扫码登录

0.1262s