一些杂七杂八的知识

一、iOS系统架构以及常用框架

1.iOS基于UNIX系统 因此从系统的稳定性来说他要比其他操作系统的产品好很多

2.iOS的系统框架分为四层 由上到下以次可分为:可触摸层(Cocoa Touch layer)、媒体层(Media layer)、核心服务层(Core Services layer)、核心操作系统层(Core OS layer)

触摸层:为应用程序开发提供了各种常用的框架并且大部分的框架与界面有关 本质上说它负责iOS设备上的触摸交互操作 

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

核心服务层:我们可以通过它来访问一些iOS的服务 

核心操作系统层:包括内存管理、文件系统、电源管理以及一些其他的操作系统任务 它可以直接和硬件设备进行交互 核心操作系统层

Cocoa Touch简介

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

应用程序的框架

应用程序项目都是从Cocoa Touch层开始的 具体来说就是从UIKit Framework开始的 挡在编写程序的过程中需要用到一些特殊功能的时候  我们应该从框架最顶端技术开始寻找相应的框架 只有在上层结构无法解决时 才能使用其下层的技术 其实 顶层的框架以及涵盖了我们绝大多数需要的功能

常用的SDK框架功能

AddressBook.framework  提供访问存储核心数据库中用户联系人信息的功能

AddressBookUI.framework 提供一个用户界面 用于显示存储在地址薄中的联系人信息

AudioToolbox.framework 提供音频录制和回放的底层API  同时也负责管理音频硬件

AudioUnit.framework 提供一个接口 让我们的应用程序可以堆音频进行处理

AVFoundation.framework 提供音频录制和回放的底层API 同时也负责管理音频硬件

CFNetwork.framework 访问和配置网络 像HTTP、FTP和Bonjour Services

CoreFoundation.framework 提供抽象的常用数据类型 如 Unicode strings、XML、URL等

CoreGraphics.framework 提供2D绘制的基于C的API

coreLocation.framework 使用GPS和WiFi获取位置信息

Foundation.framework 提供Object-C的基础类(像NSObject)、基本数据类型和操作系统服务等

GameKit.framework 为游戏提供网络功能:点对点互联和游戏中的语音交流

MapKit.framework 为应用程序提供内嵌地图的接口

MediaPlayer.framework 提供播放视频和音频的功能

MessageUI.framework 提供视图控制接口用意处理E-mail和短信

OpenGLES.framework 提供简洁而高效的绘制2D和3D图形的OpenGL API子集

QuartzCore.framework 提供动画特效以及通过硬件进行渲染的能力

StoreKit.framework 为应用程序提供在程序运行中消费的支持

SystemConfiguration.framework 检测当前是否可用和硬件设备状态的能力

UIKit.framework 创建和管理应用程序的用户界面

第三方的有

AFNetworking 网络请求库

SDWebImage 网络图片加载

FMDB 数据库

Masonry 自动布局

二、讲述一次在这个APP中 用户触发了一个事件 引起一个服务请求 然后服务端返回 并且更新前端界面的过程

数据以磁信息格式躺在磁盘上 被马达转动 被磁头读取信号 转换为电信号 被驱动转成二进制放入内存 被Cache读取 被CPU读取 被服务器代码读取 被网卡驱动层层打包 从网卡经过铜线传到交换机 进入光线被射出去 最终达到一个无线路由器 路由器发射微波辐射信号 手机网卡收到信号 驱动层层解包最后传给程序 程序把这段信息经过一个parser得到格式化数据 发通知给控制器 控制器更新视图数据

三、Objective-C的类可以多重继承吗?Category是什么?重写一个类的方式用继承好还是分类好?为什么?

答:Objective-C的类不可以多重继承 可以实现多个接口 通过实现多个接口可以完成C++的多重继承;category是类别 一般情况下用分类好 用Category去重写类的方法 仅对本Category有效 不会影响到其他类与原有类的关系

四、#import跟#include又什么区别 @class呢 #import<>跟#import"" 又有什么区别

#import是Objective-C导入头文件的关键字 #include是C/C++导入头文件的关键字

使用#import头文件会自动只导入一次 不会重复导入 相当于#include和#pragma once @class告诉编译器某个类的声明 当执行时才会去查看文件 可以解决头文件的相互包含 #import<>用来包含系统的头文件 #import用来包含用户头文件

四、属性readwrite、readonly、assign、retain、copy、nonatomic各是什么作用 在哪种情况下用?

1、readwrite是可读可写特性 需要生成getter方法和setter方法时

2、readonly是只读特性 只会生成getter方法不会生成setter方法 不希望属性在类外改变

3、assign是赋值特性 setter方法将传入参数赋值给实例变量 仅设置变量时

4、retain表示持有特性 setter方法将传入参数先保留着 再赋值 传入参数的retaincount会+1

5、copy表示赋值特性 setter方法将传入的对象复制一份 需要完全一份新的变量时

6、nonatomic非原子操作 决定编译器生成的setter getter是否原子操作 aotomic表示多线程安全 一般使用nonatomic

四、对于语句NSString *obj=[[NSData alloc] init];obj在编译时和运行时分别是什么类型的对象

编译时是NSString的类型 运行时是NSData类型的对象 

五、常见的Objective-C的数据类型有那些 和C的基本数据类型有什么区别 如NSInteger和int

Objective-C的数据类型有NSString、NSNumber、NSArray、NSMutableArray、NSData等等

这些都是class 创建后便是对象 而C语言的数据基本类型int 知识一定字节的内存空间 用于存放数值 NSInteger是基本数据类型 并是NSNumber的子类 当然也不是NSObject的子类 NSInteger是基本数据类型Int或者Long的别名(NSInteger的定义typedef long NSInteger)它的区别在于 NSInteger会根据系统是23位还是64位来决定 是本身是int还是Long

六、id声明的对象有什么特性

id声明的对象具有运行时的特性 既可以指向任意类型的Objective-C对象

七、Objective-C如何对内存管理的 说说你的看法和解决方法

Objective-C内存管理主要有三种方式ARC(自动内存计数)、手动内存计数、内存池

1、(Garbage Collection)自动内存计数 :这种方式和java类似 在你的程序执行过程中 始终有一个高人在背后准确的帮你收拾垃圾 你不用考虑它什么时候开始工作 怎样工作 你只需要明白 我申请了一段内存空间 当我不在使用从而这段内存成为垃圾的时候 我就彻底的把它忘掉 反正那个高人会帮我收拾垃圾 遗憾的是 那个高人需要消耗一定的资源 在携带设备里面 资源是紧俏商品所以iPhone不支持这个功能 所以"Garbage Collection"内部机制感兴趣的同学可以参考一些其他的资料 

解决:通过alloc - initial方式创建的 创建后引用计数+1 那么程序中做相应次数的release就好了

2、(Reference Counted)手动内存计数:就是说 从一段内存被申请以后 就存在一个变量用于保存这段内存被使用的次数 我们暂时把它称为计数器 当计数器变为0的时候 那么就是释放这段内存的时候 比如说 当在程序A里面一段内存被成功申请完成之后 那么这个计数器就从0变成1(我们把这个过程叫做alloc) 然后程序B也需要使用内存 那么计数器就从1变成了2 (我们把这个过程叫做retain) 紧接着程序A不再需要这段内存了 那么程序A就把这个计数器减1(我们把这个过程叫做release) 程序B也不再需要这段内存的时候 那么也把计数器减1(这个过程还是release) 当系统(也就是Foundation)发现这个计数器变成了0 那么就会调用内存回收程序把这段内存回收(我们把这个过程叫做dealloc) 顺便提一句 如果没有Foundation 那么维护计数器 释放内存等工作就需要手工来完成

解决:一般由类的静态方法创建的 函数名中不会出现alloc或init字样 如[NSString string] 和[NSArray arrayWithObject:] 创建后引用计数+0 在函数出栈后释放 即相当于一个栈上的局部变量 当然也可以通过retain延长对象的生存期

3、(NSAutoRealeasePool)内存池:可以通过创建和释放内存池控制内存申请和回收的时机

解决:是由autorelease加入系统内存池:内存池是可以嵌套的 每个内存池都需要有一个创建是释放对 就像main函数中写的一样 使用也很简单 比如[[[NSString alloc] initWithFormat:@"Hey you!"] autorelease] 即将一个NSString对象加入到最内层的系统内存池 当我们释放这个内存池时 其中的对象都会被释放

八、原子(atomic)跟非原子(non-atomic)属性又什么区别

1、atomic提供多线程安全 是防止在写未完成的时候被另一个线程读取 造成数据错误 

2、non-atomic:在自己管理内存的环境中 解析的访问器保留并自动释放返回值 如果定了nonatomic 那么访问器只是简单的返回了这个值

九、看下面的程序 第一个NSLog会输出什么?这时str的retainCount是多少?第二个和第三个呢?为什么?

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 212,686评论 6 492
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 90,668评论 3 385
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 158,160评论 0 348
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 56,736评论 1 284
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 65,847评论 6 386
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 50,043评论 1 291
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 39,129评论 3 410
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 37,872评论 0 268
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 44,318评论 1 303
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 36,645评论 2 327
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 38,777评论 1 341
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 34,470评论 4 333
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 40,126评论 3 317
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 30,861评论 0 21
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,095评论 1 267
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 46,589评论 2 362
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 43,687评论 2 351

推荐阅读更多精彩内容