Objective-C加强2Foundation框架

6.Foundation框架
  什么是框架
  众多功能\API的集合

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

  如何使用Foundation框架
  要想使用Foundation框架中的功能,包含它的主文件即可
  #import <Foundation/Foundation.h>

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系统)

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

  解决方案很简单, 只需要删除Xcode的缓存即可,

  缓存路径是 /Users/用户名/Library/Developer/Xcode/DerivedData  (默认情况下, 这是一个隐藏文件夹)

  要想看到上述文件夹, 必须在终端敲指令显示隐藏文件夹, 指令如下
    显示隐藏文件 : defaults write com.apple.finder AppleShowAllFiles –bool true
    隐藏隐藏文件 : defaults write com.apple.finder AppleShowAllFiles –bool false
    (输入指令后, 一定要重新启动Finder)

NSString
  什么是NSString
  一个NSString对象就代表一个字符串(文字内容)
  一般称NSString为字符串类

  右图中的文字内容普遍都是用NSString来表示的
  

 


NSString的创建
  NSString的创建方式比较多
  最直接的方式(这是常量字符串)
    NSString *str = @"I'm in itcast.";

  格式化的方式
    NSString *str = [NSString stringWithFormat:@"My age is %d", 10];
    NSString *str = [[NSString alloc] initWithFormat:@"My age is %d", 10];

  从文件中读取
  从URL中读取

从文件中读取 

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

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

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

 从URL中读取

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

  // 创建URL路径
  NSURL *url = [NSURL URLWithString:@"file:///Users/mj/Desktop/test.txt"];

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

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

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

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

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

URL的创建
  传入完整的字符串创建
  NSURL *url = [NSURL URLWithString:@"file:///Users/mj/Desktop/str.txt"];

  通过文件路径创建(默认就是file协议的)
  NSURL *url = [NSURL fileURLWithPath:@"/Users/mj/Desktop/str.txt"];

NSString的存储
  可以将NSString存储到一个文件中
  NSString  *str = @"哇哈哈哈";
  [str writeToFile:@"/Users/mj/Desktop/str.txt" atomically:YES encoding:NSUTF8StringEncoding error:nil];

  [str writeToURL:[NSURL URLWithString:@"/Users/mj/Desktop/str.txt"] atomically:YES encoding:NSUTF8StringEncoding error:nil];

NSString的大小写处理
 - (NSString *)uppercaseString;
  全部字符转为大写字母

 - (NSString *)lowercaseString
  全部字符转为小写字母

 - (NSString *)capitalizedString
  首字母变大写,其他字母都变小写

NSString的比较
  - (BOOL)isEqualToString:(NSString *)aString;
    两个字符串的内容相同就返回YES, 否则返回NO

  - (NSComparisonResult)compare:(NSString *)string;
    这个方法可以用来比较两个字符串内容的大小
    比较方法: 逐个字符地进行比较ASCII值,返回NSComparisonResult作为比较结果
    NSComparisonResult是一个枚举,有3个值:
      如果左侧   > 右侧,返回NSOrderedDescending,
      如果左侧   < 右侧,返回NSOrderedAscending,
      如果左侧  == 右侧返回NSOrderedSame

  - (NSComparisonResult) caseInsensitiveCompare:(NSString *)string;
    忽略大小写进行比较,返回值与compare:一致

NSString的搜索
  - (BOOL)hasPrefix:(NSString *)aString;
    是否以aString开头

  - (BOOL)hasSuffix:(NSString *)aString;
    是否以aString结尾

  - (NSRange)rangeOfString:(NSString *)aString;
    用来检查字符串内容中是否包含了aString
    如果包含, 就返回aString的范围
    如果不包含, NSRangelocationNSNotFound, length为0

NSRange
  NSRangeFoundation框架中比较常用的结构体, 它的定义如下:


    typedef struct _NSRange {
        NSUInteger location;
        NSUInteger length;
    } NSRange;


  // NSUInteger的定义
  typedef unsigned int NSUInteger;

  NSRange用来表示事物的一个范围,通常是字符串里的字符范围或者数组里的元素范围

  NSRange有2个成员
    NSUInteger location : 表示该范围的起始位置
    NSUInteger length : 表示该范围内的长度

  比如@“I love iOS”中的@“iOS”可以用location为7,length为3的范围来表示

NSRange的创建
  有3种方式创建一个NSRange变量
  方式1
    NSRange range;
    range.location = 7;
    range.length = 3;

  方式2
    NSRange range = {7, 3};
    或者
    NSRange range = {.location = 7,.length = 3};

  方式3 : 使用NSMakeRange函数
    NSRange range = NSMakeRange(7, 3);

NSString的截取和替换
  - (NSString *)substringFromIndex:(NSUInteger)from;
    从指定位置from开始(包括指定位置的字符)到尾部

  - (NSString *)substringToIndex:(NSUInteger)to;
    从字符串的开头一直截取到指定的位置to,但不包括该位置的字符

  - (NSString *)substringWithRange:(NSRange)range;
    按照所给出的NSRange从字符串中截取子串

  - (NSString *)stringByReplacingOccurrencesOfString:(NSString *)target withString:(NSString *)replacement;
    用replacement替换target

NSString与路径
  - (BOOL)isAbsolutePath;
    是否为绝对路径

  - (NSString *)lastPathComponent;
    获得最后一个目录

  - (NSString *)stringByDeletingLastPathComponent;
    删除最后一个目录    

  - (NSString *)stringByAppendingPathComponent:(NSString *)str;
    在路径的后面拼接一个目录
    (也可以使用stringByAppendingString:或者stringByAppendingFormat:拼接字符串内容)

NSString与文件拓展名
  - (NSString *)pathExtension;
    获得拓展名

  - (NSString *)stringByDeletingPathExtension;
    删除尾部的拓展名

  - (NSString *)stringByAppendingPathExtension:(NSString *)str;
    在尾部添加一个拓展名

NSString的其他用法
  - (NSUInteger)length;
    返回字符串的长度(有多少个文字)    

  - (unichar)characterAtIndex:(NSUInteger)index;
    返回index位置对应的字符

  转为基本数据类型
    - (double)doubleValue;
    - (float)floatValue;
    - (int)intValue;

  - (char *)UTF8String;
  转为C语言中的字符串

NSString去除空格
  去除所有的空格
  [str stringByReplacingOccurrencesOfString:@" " withString:@""]

  去除首尾的空格
  [str stringByTrimmingCharactersInSet:[NSCharacterSet whitespaceCharacterSet]];

NSMutableString
  NSMutableStringNSString的子类

  NSMutableStringNSString区别
    NSString是不可变的,  里面的文字内容是不能进行修改的
    NSMutableString是可变的, 里面的文字内容可以随时更改

  NSMutableString能使用NSString的所有方法

NSMutableString的常用方法
  - (void)appendString:(NSString *)aString;
    拼接aString到最后面

  - (void)appendFormat:(NSString *)format, ...;
    拼接一段格式化字符串到最后面

  - (void)deleteCharactersInRange:(NSRange)range;
    删除range范围内的字符串

  - (void)insertString:(NSString *)aString atIndex:(NSUInteger)loc;
    在loc这个位置中插入aString

  - (void)replaceCharactersInRange:(NSRange)range withString:(NSString *)aString;
    使用aString替换range范围内的字符串

NSArray
  什么是NSArray
  NSArray是OC中的数组类, 开发中建议尽量使用NSArray替代C语言中的数组

  C语言中数组的弊端
    int array[4] = {10, 89, 27, 76};
    只能存放一种类型的数据
    不能很方便地动态添加数组元素
    不能很方便地动态删除数组元素

  NSArray的使用注意
  只能存放任意OC对象, 并且是有顺序
  不能存储非OC对象, 比如int\float\double\char\enum\struct等
  它是不可变的, 一旦初始化完毕后, 它里面的内容就永远是固定的, 不能删除里面的元素, 也不能再往里面加元素

NSArray的创建
  NSArray常见的创建方式有
    + (instancetype)array;
    + (instancetype)arrayWithObject:(id)anObject;
    + (instancetype)arrayWithObjects:(id)firstObj, ...;
    + (instancetype)arrayWithArray:(NSArray *)array;

    + (id)arrayWithContentsOfFile:(NSString *)path;
    + (id)arrayWithContentsOfURL:(NSURL *)url;

  可以将一个NSArray保存到文件中
    - (BOOL)writeToFile:(NSString *)path atomically:(BOOL)useAuxiliaryFile;
    - (BOOL)writeToURL:(NSURL *)url atomically:(BOOL)atomically;


NSArray的检索
  - (NSUInteger)count;
    获取集合元素个数

  - (id)objectAtIndex:(NSUInteger)index;
    获得index位置的元素

  - (BOOL)containsObject:(id)anObject;
    是否包含某一个元素

  - (id)lastObject;
    返回最后一个元素

  - (id)firstObject;
    返回最后一个元素


  - (NSUInteger)indexOfObject:(id)anObject;
    查找anObject元素在数组中的位置(如果找不到,返回-1)

  - (NSUInteger)indexOfObject:(id)anObject inRange:(NSRange)range;
    在range范围内查找anObject元素在数组中的位置

NSArray的简写
  自从2012年开始, Xcode的编译器多了很多自动生成代码的功能, 使得OC代码更加精简
  
  数组的创建
    之前
    [NSArray arrayWithObjects:@"Jack", @"Rose", @"Jim", nil];

    现在
    @[@"Jack", @"Rose", @"Jim"];

  数组元素的访问
    之前
    [array objectAtIndex:0];
    现在
    array[0];

NSArray给所有元素发消息
  - (void)makeObjectsPerformSelector:(SEL)aSelector;
  - (void)makeObjectsPerformSelector:(SEL)aSelector withObject:(id)argument;
  让集合里面的所有元素都执行aSelector这个方法

NSArray遍历元素
  遍历, 就是将NSArray里面的所有元素一个一个取出来查看

  常见的遍历方式有
  普通遍历
    for (int i = 0; i<array.count; i++) {  }

  快速遍历
    for (id obj in array) {  }

  Block遍历
    [array enumerateObjectsUsingBlock:^(id obj, NSUInteger idx, BOOL *stop) {
    
    }];

NSArray与NSString
  - (NSString *)componentsJoinedByString:(NSString *)separator;
    这是NSArray的方法, 用separator作拼接符将数组元素拼接成一个字符串

  - (NSArray *)componentsSeparatedByString:(NSString *)separator;
    这是NSString的方法, 将字符串用separator作为分隔符切割成数组元素


NSMutableArray
  什么是NSMutableArray
  NSMutableArrayNSArray的子类
  NSArray是不可的, 一旦初始化完毕后, 它里面的内容就永远是固定的, 不能删除里面的元素, 也不能再往里面添加元素
  NSMutableArray是可变的, 随时可以往里面添加\更改\删除元素

NSMutableArray添加元素

  - (void)addObject:(id)object;
    添加一个元素

  - (void)addObjectsFromArray:(NSArray *)array;
    添加otherArray的全部元素到当前数组中

  - (void)insertObject:(id)anObject atIndex:(NSUInteger)index;
    在index位置插入一个元素

NSMutableArray删除元素
  - (void)removeLastObject;
    删除最后一个元素

  - (void)removeAllObjects;
    删除所有的元素

  - (void)removeObjectAtIndex:(NSUInteger)index;
    删除index位置的元素

  - (void)removeObject:(id)object;
    删除特定的元素

  - (void)removeObjectsInRange:(NSRange)range;
    删除range范围内的所有元素

NSMutableArray替换元素
  - (void)replaceObjectAtIndex:(NSUInteger)index withObject:(id)anObject;
    用anObject替换index位置对应的元素

  - (void)exchangeObjectAtIndex:(NSUInteger)idx1 withObjectAtIndex:(NSUInteger)idx2;
    交换idx1和idx2位置的元素

NSMutableArray的简写
  设置元素
  以前
  [array replaceObjectAtIndex:0 withObject:@"Jack"];

  现在
  array[0] = @"Jack";




posted @ 2017-02-06 15:44  laugh  阅读(238)  评论(0编辑  收藏  举报