【iOS开发】从Cocoa框架说开去--Fundation框架系列
Core Animation
Core Audio
Core Data
- UIKit 负责启动和结束应用程序,控制界面和多触点事件
- Map Kit 提供地图的相关服务,定位或者区域检测等
- Game Kit 创建和使用网络机制
- Message UI/Address Book UI 提供操作电子邮件和联系人的信息
Foundation类层次的根是NSObject类,它(和NSObject及NSCopying协议一起)定义了基本的对象属性和行为。NSObject是一个抽象类,该类被其他类继承来产生对象。Foundation框架的剩余部分由几组相互关联的类和一些独立的类组成。
Fundation第二部分
Foundation第三部分
图示解析:
值对象:
值对象封装各种类型数据,提供对数据进行访问和操作的路径,因为他们都是对象,所以可以对它们进行归档、解档。
NSData类为字节流提供面向对象的存储空间
NSValue合NSNumber为简单的数据类型提供面向对象的存储空间,
NSDate NSCalendarDate NSTimeZone NSCanlendar NSDataCompoments 和NSLocale类提供代表时间日期日历和地域设置的对象 其包含的方法可以用于计算日期和时间差,以各种格式显示日期和时间,以及调整世界上各个位置时间和日期
字符串。NSString是另一类值对象,负责为以null结尾的、具有特定编码的字节数组提供面向对象的存储空间。它支持对UTF-16、UTF-8、MacRoman、和很多其它编码的字符串之间进行转换。NSString还提供对字符串进行检索、组合、和比较、以及对文件系统路径进行操作的方法。您可以用NSScanner对象来对NSString对象中的数字和词进行解析。NSCharacterSet(显示在框图中的集合类部分)代表可以在各个NSString和NSScanner方法中使用的一组字符。
集合。集合是以一定的顺序存储和访问其它对象(通常是数值)的对象。NSArray的索引从0开始,NSDictionary使用键-值对,而NSSet则负责对象的随机存储(NSCountedSet类使集合具有唯一标识)。通过NSEnumerator对象,您可以访问一个集合中的元素序列。集合对象是属性列表的必要元素,和其它所有对象一样,它也可以被归档和分发
操作系统服务。 很多Foundation类为访问各种底层的操作系统服务提供便利,同时又把开发者从操作系统的具体特性隔离开来。举例来说,您可以通过NSProcessInfo类查询应用程序运行的环境;通过NSHost类得到主机系统在网络中的名称和地址;通过NSTimer对象,您可以按指定的时间间隔向其它对象发送消息;NSRunLoop可以帮您管理应用程序或其它类型程序的输入源;而NSUserDefaults则为存储全局(主机级别)和用户级缺省值(预置)的系统数据库提供编程接口。
文件系统和URL。 NSFileManager为诸如创建、重命名、删除、和移动文件这样的文件操作提供统一的接口。NSFileHandle则可以进行较为底层的文件操作(比如文件内查找操作)。NSBundle可以寻找存储在程序包中的资源,可以动态装载某些资源(比如nib文件和代码)。您可以用NSURL和NSURLHandle类来表示、访问、和管理源于URL的数据。
进程间通讯。 这个范畴中的大部分类代表不同的系统端口、套接字、和名字服务器,对实现底层的IPC很有用。NSPipe代表一个BSD管道,即一种进程间的单向通讯通道。
线程和子任务。 NSThread类使您可以创建多线程的程序,而各种锁(lock)类则为彼此竞争的线程在访问进程资源时提供各种控制机制。通过NSTask,您的程序可以分出一个子进程来执行其它工作或进行进度监控。
归档和序列化。这个范畴中的类使对象分发和持久保留成为可能。NSCoder及其子类和NSCoding协议一起,可以以独立于架构的方式来表示对象中包含的数据,可以将类信息和数据一起存储。
表达式和条件判断。条件判断类,即NSPredicate、NSCompoundPredicate、和NSComparisonPredicate类,负责对获取或过滤对象的逻辑约束条件进行封装。NSExpression对象则代表条件判断中的表达式。
UIKit主要用于界面架构 类结构如下
常用结构体
在Foundation中定义了很多常用结构体类型来简化我们的日常开发,这些结构体完全采用Objective-C定义,和我们自己定义的结构体没有任何区别,之所以由框架为我们提供完全是为了简化我们的开发。常用的结构体有NSRange、NSPoint、NSSize、NSRect等
可以看到对于常用结构体在Foundation框架中都有一个对应的make方法进行创建,这也是我们日后比较常用的操作;而且与之对应的还都有一个NSStringFromXX方法来进行字符串转换,方便我们调试。上面也提到NSSize其实就是CGSize,NSRect其实就是CGRect,我们可以通过查看代码进行确认,例如NSSize定义:
/* Sizes. */
struct CGSize {
CGFloat width;
CGFloat height;
};
typedef struct CGSize CGSize;
下一篇将从Fundation的API开始写起。
【iOS开发】从Cocoa框架说开去--Fundation框架系列相关推荐
- 苹果iOS开发深入浅出Cocoa之类与对象
[IT168技术]最近打算写一些ObjC中比较底层的东西,尤其是 runtime 相关的.苹果已经将 ObjC runtime 代码开源了,我们可以从:http://opensource.apple. ...
- 【无限互联】iOS开发视频教程— 2.8 iPhone开发之swtch语句
核心内容 1. switch语句语法 2. 防止case穿透,与break结合使用 视频地址:iPhone开发之swtch语句
- 那些在学习iOS开发前就应该知道的事(part 1)
2019独角兽企业重金招聘Python工程师标准>>> 英文原文:Things I wish I had known before starting iOS development- ...
- iOS开发针对对Masonry下的FPS优化讨论
今天博客的内容就系统的讨论一下Masonry对FSP的影响,以及如何更好的使用Masonry.如果你对iOS开发足够熟悉的话,那么对Masonry框架应该不陌生.简单的说,Masonry的诞生让Aut ...
- 学习iOS开发前要知道的事儿
英文原文:Things I wish I had known before starting iOS development-Part 1 设计师设计出来了一个不错的引导界面,然而当我看到设计稿的时候 ...
- 那些在学习iOS开发前就应该知道的事
原文请看:http://www.cocoachina.com/ios/20150608/12052.html 那些在学习iOS开发前就应该知道的事 2015-06-08 09:14 编辑:suilin ...
- iOS开发的知名个人博客及几个网站
网站推荐 https://www.raywenderlich.com/ https://talk.objc.io/ https://objccn.io/ http://gold.xitu.io/ 网站 ...
- iOS开发的知名大牛博客小汇
王巍的博客:王巍目前在日本横滨任职于LINE.工作内容主要进行Unity3D开发,8小时之外经常进行iOS/Mac开发.他的陈列柜中已有多款应用,其中番茄工作法工具非常棒. http://onevca ...
- 从今天开始学习iOS开发(iOS 7版)-- 概论 (一)
<Start Developing iOS Apps Today>为iOS开发提供了完美的起点.你可以在Mac上创建运行在iPad,iPhone和iPod touch上的iOS app.查 ...
最新文章
- ASP.NET 例程完全代码版(3)——随意创建图形信息
- mysql 5.1 innodb trx_mysql 优化innodb_flush_log_at_trx_commit的案例介绍
- OpenCV实现图像对齐ECC算法(附完整代码)
- 企业选择使用混合云集成的原因
- jsp:include和%@include file=%的区别(简单了解)
- 数据库程序设计课堂笔记
- 学计算机买小米air可以么,Mi 小米 Air13.3 笔记本电脑 三个月使用体验
- 搭建cocos2d-x-android环境 Windows XP3 + Eclipse + NDKR7(或ndkr7b)+COCOS2DX(没有用到cygwin和minigw)...
- Java数据持久层框架
- raw数据拆分成rggb四通道,拆分与合成
- Servlet 身份验证体系结构(源码)
- 【AIOT】手表调研
- linpack测试软件,服务器性能测试(linpack,stream,netperf,iometer)
- Mac Brew安装及换源教程
- dax-自定义周做同比和环比
- vue配置开发、测试、生产环境(proxy中获取process.env.NODE_ENV)
- Java中Lambda表达式和stream的使用
- 发json请求,报415错误。POST http://localhost:8080/ 415
- python字符串如何交叉_Python-两个字符串的交集
- arcgis怎么生成一个html,arcgis desktop 10.x怎么生成1:100万、1:50万等标准图幅经纬网格...
热门文章
- 一篇文章带你入门 SpringSecurity实现密码加密和解码
- oracle参数open_cursors和session_cached_cursor详解!
- 《喝彩中华》李小萌王雷同台演绎“霸王别姬”
- 微软.NET手持设备开发工具包基础篇
- Ros 应用程序的多种调试方法
- 配置并使用SharePoint 2010的文档转换功能
- 突破海康相机255预置点的限制
- 腾讯安全获ISACA认证,提供一站式安全人才培训服务
- 线性代数中向量、矩阵深度理解(PartI)
- uniapp之APP/微信小程序/公众号支付