框架和带属性字符串(斯坦福笔记)

框架和带属性字符串(斯坦福笔记)_第1张图片


引言:

iOS的系统架构分为四个层次:核心操作系统层(Core OS layer)、核心服务层(Core Services layer)、媒体层(Media layer)和可触摸层(Cocoa Touch layer)

Core OS : 位于iOS系统架构最下面的一层是核心操作系统层,它包括内存管理、文件系统、电源管理以及一些其他的操作系统任务。它可以直接和硬件设备进行交互。

Core Services : 第二层是核心服务层,我们可以通过它来访问iOS的一些服务。

Media : 第三层是媒体层,通过它我们可以在应用程序中使用各种媒体文件,进行音频与视频的录制,图形的绘制,以及制作基础的动画效果。

Cocoa Touch : 最上面一层是可触摸层,这一层为我们的应用程序开发提供了各种有用的框架,并且大部分与用户界面有关,本质上来说它负责用户在iOS设备上的触摸交互操作。


Cocoa Touch层中的很多技术都是基于Objective-C语言的。Objective-C语言为iOS提供了像集合、文件管理、网络操作等支持。像UIKit框架,它为应用程序提供了各种可视化组件,比如像窗口(Window)、视图(View)和按钮组件(UIButton)。Cocoa Touch层中的其他框架,对我们在应用程序中的开发来说也是非常有用的,如访问用户通信录功能框架、获取照片信息功能的框架、负责加速感应器和三维陀螺仪等硬件支持的框架。

对应用开发者来说,最重要的就是Cocoa Touch框架了。


id使用时的保护

内省:

isKindOfClass:kind是种宽泛的要求,只要对象是该类,或者该类子类的实例都返回YES

isMemberOfClass:Member是种严格的要求,对象必须是该类的实例

respondsToSelector:实例或者类是否响应某方法;

协议:id后使用<>来表示

id<>的含义:这是一个id,指向我们不知道的类,但它要对尖括号中定义的这一组方法作出反应;

协议的安全性介于id和静态类型之间;



Foundation

Foundation框架为所有的应用程序提供基本系统服务;

UIKit和其它的框架都是建立在Foundation框架上面的。Foundation框架是用Object-C对Core Foundation框架里许多特性的封装。

NSObject:

description:

    该方法定义在NSObject协议里,因为NSObject不是唯一的根类,NSProxy也是遵从NSObject协议的根类,因此很多方法需要放在NSObject协议里。

    两个地方会用的description方法:

    1:NSLog %@,用%@时,description会被发送给匹配对象;

    2:NSString通过返回self来实现description;

NSArray:

    objectAtIndex:如果index不在序列中,代码会崩溃

    lastObject、firstObject:如果数组中没有成员,返回nil,不会崩溃;

    排序:

    sortedArrayUsingSelector:用于NSArray

    sortUsingSelector:用于NSMutableArray

    这两个方法的意思是利用指定的selector对array的元素进行排序,所以,selector方法是发送给array元素的;因此array元素必须要能响应selector方法。如果array元素没有定义这种方法,一个在分类中声明。

   框架和带属性字符串(斯坦福笔记)_第2张图片

    上图在分类中实现对NSDictionary的排序方法,注意排序方法返回值类型;

    框架和带属性字符串(斯坦福笔记)_第3张图片

    上图是调用排序方法排序;

    并发执行任务:

     makeObjectsPerformSelector:这是NSArray和NSSet的方法,类似 for循环,但效率高于for循环;让数组成员并发执行同一事件;

    拆分与合并:    

     将string字符串转换为array数组

   NSArray  *array = [Str componentsSeparatedByString:@","];


  将array数组转换为string字符串

  NSString *tempString = [mutableArray componentsJoinedByString:@","];--分隔符


NSNumber

    这个类被用于包含原始类型,例如int、float、double、BOOL、enums等。以便于将基本类型作为对象来处理。

ios6中新增的创建方法:"@()"

    NSNumber *three = @3;

    NSNumber *underline = @(NSUnderlineStyleSingle);

NSValue    

    NSValue可以包装任意类型的数据(例如int、float、char、pointer、structures等),目的是为了使以上数据类型能被加入集合里(例如NSArray、NSSet)。事实上NSNumber是NSValue的子类。

    需要注意的是,有时候将struct包装起来的好办法是将它们转化为字符串,然后可以将字符串放入数组,并且可以在调试器中打印,然后还有方法将字符串转换为C struct。(估计是字符串拆分和合并)

NSData

    NSData是二进制数据

NSDate

    用于表示日期

NSSet/NSMutableSet

    是对象的无序集合,对象都是唯一的,就算你把相同的对象放进去两次,他也只会存在唯一一个。

    NSSet很便于告诉你集合中是否有什么,而如果是数组中有1000个元素,数组可能需要二分查找(甚至还需要排序),但NSSet经过hash处理,效率很高。

NSOrderedSet/NSMutableOrderedSet

    是对象的有序集合,介于NSSet与数组之间

NSDictionary

    它是键值对的不可变集合,类似哈希表,所有键和值都是强存储的,只有字典在堆中,它们就在。键和值显然都是对象。

    字典通常的创建方法是另一种@语法,@{};

    

Property List

    属性列表的意思是 集合的集合。什么是集合?也就是NSArray、NSDictionary甚至是NSString、NSData、NSNumber等,这些都是简单的集合,或者可以看成集合的叶节点。任何对象图,只要其中只有数组、字典、字符串等这些简单的集合,那它就是属性列表。

    为什么定义这个术语?因为IOS中又一系列API将属性列表作为参数,但属性列表只是我们定义的一个术语,其类型可能用的是id。

NSUserDefaults

    是只作用于属性列表的类,它是一种共享字典,这甚至在应用程序启动和退出时仍然持续存在,它就像一个永久的NSDictionary。NSUserDefaults数据库中存储的一切都必须是一个属性列表,不过它并非一个完全的数据库,它很小,性能不是很好,只能将小对象存放在这里。

你可能感兴趣的:(框架和带属性字符串(斯坦福笔记))