《Objective-C基础教程》读书笔记5—FoundationKit1

一、Foundation Kit介绍
Foundation框架只是Cocoa的一部分,没有内置于OC的语言中。Cocoa实际上是由许多个不同的框架组成的,其中最常用语桌面端(OS X)应用程序的是Foundation和Application kit。它包含了所有的用户界面(UI)对象和高级类。开发iOS应用,主要使用UIKit(User Interface Kit)。UIKit之于iOS平台就像AppKit之于OS X平台一样,它包含了iOS应用程序所需要的所有界面对象。
1.1 稳固的Foundation
Foundation,顾名思义,就是两类UI框架的基础,因为它不包含UI对象,所以它的对象可以在iOS或OS X应用程序中兼容。Foundation框架中有很多的、面向数据的简单类和数据类型。Foundation框架是以另一个框架CoreFoundation为基础创建的。CoreFoundation框架是用纯C语言写的。如果函数或变量的名称以CF开头,那么它们就是CoreFoundation框架中的。其中很多都可以在Foundation框架中找到相对应的。它们之间的转换也非常简单。
1.2 一些有用的数据类型
结构体
1.2.1 范围
第一个结构体是NSRange
typedef struct _NSRange
{
unsigned int location;
unsigned int length;
}NSRange
这个结构体用来表示相关事物的范围,通常是字符串里的字符范围或者数组里的元素范围。location字段存放该范围的起始位置,而length字段则是该范围内所含元素的个数。location还可以用NSNotFound这个值来表示没有范围。注意:location从0开始算起。
创建新的NSRange有三种方式。
第一种,直接给字段赋值:

《《Objective-C基础教程》读书笔记5—FoundationKit1》 1528208817703.jpg

第二种,应用C语言的聚合结构赋值机制

《《Objective-C基础教程》读书笔记5—FoundationKit1》 1528209165365.jpg

第三种方式是Cocoa提供的一个快捷函数NSMakeRange():

《《Objective-C基础教程》读书笔记5—FoundationKit1》 1528209332952.jpg

使用NSMakeRange()的好处是你可以在任何能够使用函数的地方的使用它,例如在方法调用中将其作为参数进行传递。如下:

《《Objective-C基础教程》读书笔记5—FoundationKit1》 1528209489237.jpg

在开发中,常用第三种方法。上面调用的是截取字符串的方法,截取特定范围内的字符串。

以下是NSRange的扩展API

《《Objective-C基础教程》读书笔记5—FoundationKit1》 99170F2B-B0B9-4267-9E6A-44B6DA0F3C3E.png

《《Objective-C基础教程》读书笔记5—FoundationKit1》 F8896A71-EC79-41ED-982A-8B5E2AED53CE.png

《《Objective-C基础教程》读书笔记5—FoundationKit1》 DA5A47EF-E19D-47D0-8D84-5552EBE8A95F.png

《《Objective-C基础教程》读书笔记5—FoundationKit1》 78855336-DDE8-44D2-BFD7-2A5B375ED78C.png

1.2.2 几何数据类型

在OC中你会经常看到处理几何图形的数据类型,它们的名称都带有CG前缀,如CGPoint和CGSize. 这些类是由Core Graphics框架提供的,用来进行2D渲染。Core Graphics是用C语言所写的,因此可以在代码中使用C语言类型的数据类型。

CGPoint表示的是笛卡尔平面中的一个坐标(x, y)。

《《Objective-C基础教程》读书笔记5—FoundationKit1》 1528210135008.jpg

CGPoint的扩展API:

《《Objective-C基础教程》读书笔记5—FoundationKit1》 F31CE3C5-F14B-4B3C-BFE4-974E75CA050C.png

《《Objective-C基础教程》读书笔记5—FoundationKit1》 1960B105-6611-47E0-A832-D002211A7226.png

CGSize用来存储宽度和高度:

《《Objective-C基础教程》读书笔记5—FoundationKit1》 1528210172302.jpg

CGSize的扩展API:

《《Objective-C基础教程》读书笔记5—FoundationKit1》 AABF2EC9-2DF3-44A4-8273-D1CC8F1EC7F3.png

《《Objective-C基础教程》读书笔记5—FoundationKit1》 AFBFF195-07F5-4DEA-8BBE-54820D483A33.png

矩形数据类型,它由坐标和大小复合而成。

《《Objective-C基础教程》读书笔记5—FoundationKit1》 1528210299884.jpg

CGRect的扩展API

《《Objective-C基础教程》读书笔记5—FoundationKit1》 0ADE5885-DCEE-444A-ACF1-94630765B386.png

《《Objective-C基础教程》读书笔记5—FoundationKit1》 5C78B264-B7EE-445E-A288-FB8095266120.png

《《Objective-C基础教程》读书笔记5—FoundationKit1》 0C4418DC-F2AF-4698-84BB-BF2EF2E32872.png

Cocoa也为我们提供了创建这些数据类型的快捷函数:CGPointMake()、CGSizeMake()和CGRectMake()。

以上数据类型是C的struct结构体而不是对象的原因在于性能。程序(尤其是GUI(图形用户界面)程序)会用到很多临时的坐标、大小和矩形区域来完成工作。记住,所有的Objective-C对象都是动态分配的,而动态分配是一个代价较大的操作,它会消耗大量的时间。所以将这些结构体创建成第一级的对象会在使用过程中大大增加系统开销。

    原文作者:天山雪莲_38324
    原文地址: https://www.jianshu.com/p/9890af92522b
    本文转自网络文章,转载此文章仅为分享知识,如有侵权,请联系博主进行删除。
点赞