Objective-C 部分

1. 你如何理解 OC 的内存管理
OC 内存管理是基于引用计数。谁想使用某个对象 B,就要把对象 B 的计数器+1,如果不

使用这个对象了,那么就把对象 B 计数器-1,如果 B 对象计数器减到 0,那么 B 对象自动会调用自己的 dealloc 函数,也就是这个对象被销毁。

一句话就是 谁拥有对象,谁负责释放该对象,谁 alloc 谁应该 release 或者 autorelease

系统有一个自动释放池,对于一些对象我们可以放在自动释放池中。如果自动释放池本身销毁,那么里面的内容会被全部调用 release.

  1. assign, retain, copy, autorelease, release, dealloc 的不同assign 就是基本的赋值,就是 C 的基本的赋值retain 就是让对象引用计数+1,表示拥有了这个对象copy 把对象复制一份。copy 是深拷贝,浅拷贝auorelease 把对象放在自动释放池里面

    release 表示对象计数器-1 如果减到 0 那么对象自动 dealloc

  2. self.name= “yang”和 name= “yang”的关系

    self.name 表示调用 setter 调用一个函数

    name=”year”表示给字段 field 赋值

  3. 什么是深拷贝和浅拷贝 copy

    浅拷贝只是拷贝对象本身,不递归的拷贝里面的子对象深拷贝是把对象以及对象的对象递归拷贝。注意强调 mutableCopy 不是深拷贝如果要对自己对象 BookModel 实现拷贝 那么必须实现 NSCopying 协议实现里面的 - (id) copyWithZone:(NSZone *)zone;

  4. copy 和 mutableCopy 是什么
    mutableCopy 可变拷贝 NSString -- mutableCopy- NSMutableStringNSArray -- mutableCopy- NSMutableArray;
    NSMutableString - copy---NSString

  5. #import 和#include 区别

#import 对于包 多个相同文件只是包 一次 防止了重复包

#include 需要加上#ifndef __QF_Header__#define __QF_Header__

#endif
7. OC 有没有 GC/Gabbage Collector 垃圾回收

iPhone/OC 没有 GC 当时 Mac 本地的 OC 是有 GC 的8. KVC 是什么,有什么好处

KVC 就是 key value coding. 主要用来大量的对象赋值上。比如网络下载 json 数据进行解析,然后要给数据模型赋值。

bookModel.name = [dict objectForKey:@”name”];

bookModel.author = [dict objectForKey:@”author”];如果要用 kvc 那么就可以简写成

NSArray *arr = [NSArray arrayWithObjects:@”name”, @”author”, nil];for(NSString *field in arr) {

NSString *v = [dict objectForKey:field];

bookModel setValue:v forKey:field];}

kvc 有 2 个方法 setValue:forKey:和 valueForKey:方法分别对应 setter 和 getter 方法KVO 主要用在属性的监 上。KVO 比如用在播放视频的时候我想知道当前的播放进度

协议和代理的关系和区别协议就是规范接口(让每个对象都有相同的函数),主要是用来在多个对方中数据传输的统一接口。类似于 java 中得接口。OC 协议的所有方法不一定要全部实现。@optional,当时java 中得接口全部需要实现。
代理是一种设计模式。在 iOS 中主要是用来做反向传值。

OC 里面的 NSArray, NSDictionary 如何实现的NSArray 使用链表实现, NSDictionary 使用 hash 表

什么是单例?单例就是一个全局对象,就是只有一个对象,目的是为了数据共享。单例在多线程重要注意什么? 需要加锁 OC ,避免多个线程同时创建单例

+(id) sharedInstance {static id _s;@synchronized(self) {

if (_s == nil) _s = [[[self class] alloc] init];}

return _s;}

界面之间传值有哪些方法?
正向传就是属性,方法
反向就是代理。用单例,用 blocks,用数据库,通知中心

NSNotification 原理是啥?原理就是接收端把接受函数注册到一个数组中,发送端发送数据就直接调用之前存得函


NSNotification 是同步的。不是异步的。

1. NSNotification是同步还是异步的

是同步的. 如果需要异步 必须使用 NSNotificationQueue 实现
A notification center delivers notifications to observers synchronously. In other words, thepostNotification: methods do not return until all observers have received and processed thenotification. To send notifications asynchronously use NSNotificationQueue.

In a multithreaded application, notifications are always delivered in the thread in which the

notification was posted, which may not be the same thread in which an observer registereditself.

Hope it helps you.

类别 Category 和继承区别类别是用在给一个类扩展方法,不用保存变量,因为类别不能保存变量集成扩展方法和变量。比较重一些。类别 Category 相对轻量一些。当时不能完全替代集成。

你如何理解 ScrollView 复用, TableView 才有下拉刷新原理是?
EGO

iOS5, iOS6, iOS7 适配if (isIOS7) {

// 让iOS7 导航控制器不透明self.navigationController.navigationBar.translucent = NO;self.edgesForExtendedLayout = UIRectEdgeNone;
// 可以认为上 2 让它恢复成iOS6的经典模式

}

对于图 需要 如实现 个宏来取得正确的版本的图 iphone5 度适配,要动态的获取 度

网络部分

2. 你如何理解线程
iOS 线程是为了界面流畅,防止界面假死.比如解析一个大文件,比如一个地区详情文件,解析时间比如是 10s,那么不用线程的话,界面就会假死/卡 10s,用户体验差,那么解决方法就是很快把界面暂时,启动线程去后台解析。
再比如,做图片滤镜。图像操作会耗费很多时间,比如 5s,那么界面会假死 5s,那么用户体验差,解决方法是启动线程在后台使用滤镜算法处理图像,一旦处理完就通知主线程刷新界面.在比如:网络下载数据,由于网络状态好坏时间会不确定,那么我们需要使用线程来处理这种不确定的关系,一定数据接收完成,那么就可以通知主线程处理。再比如读取数据全国电话号码数据库,时间很长,那么就需要通过线程来做特别强调的是,线程不是快。是为了给用户一个快得假象

3. 你如何理解线程池线程池就是一堆项目的集合,就是一个线程队列来管理这些线程对象。如果需要处理一

些任务,可以从线程池中直接取线程,而不是临时创建线程。比如 NSOperationQueue 就是一个线程池,管理 NSOperation 线程对象

线程锁 NSLock
线程锁是多个线程要访问同一个资源引入的一种机制。比如 2 个线程同时写数据文件,那么需要用锁 NSLock 来保证同一个时刻只能有一个线程写。写结束后另外一个线程才能接着写。比如创建单例的时候,为了保证哪怕多个线程同时创建单例,也只能创建一个单例对象。

4. 你如何理解图片下载
图片下载一般使用 Lazy 懒加载和图片缓存的模式。懒加载就是需要的时候才去临时记载。

主要是节省内存空间和用户流量。缓存就是把 url 地址做成 md5 存在沙盒中以便下次直接使用。

3. ASI 的原理是啥??
ASI 使用 Apple 底层的 CFNetwork 框架实现的。而不是用 BSD Socket 实现的。他是一个基于 NSOperation 的线程处理网络框架。CFNetwork 是基于 InputStream/Outstream 流的方式管理数据。它内部使用了多线程异步模式进行数据的通讯。比如数据的上传进度,下载进度,缓存的管理机制。大文件下载,大文件上传,安全机制等。

4. SDWebImage 原理是什么?
SDWebImage 是一个基于 NSOperation/NSInvokeOperation 的一个多线程图片缓存框架framework,
原理是每次通过[uiimageview setImageWithUrl:]就启动一个异步线程,负责下载网络图片,一旦下载完成就把网址使用 md5 做一个校验 checksum,然后存在一个沙盒 sandbox 管理目录中,以便下次可以直接从 sandbox 中读取,而不需要从网络上下载,目的是为了节省用户流量,加快图片访问速度。

5. HTTP 原理是?HTTP是基于TCP/IP的一个网络连接协议,它是客户端和服务器通讯的常用方式。 他

是使用请求,响应模型,客户端请求,服务端响应的方式。HTTP 协议有请求头,请求体,响应头,响应体。XML/Json 是一般作为响应的数据格式传输。GET/POST 是和请求的 2 中常见方式。还有 2 中 PUT, DELETE

TCP/IP 的原理是?
TCP/IP 是网络底层的二进制协议。它是网络传输的标准协议。 TCP 是稳定,可靠的点对

点传输,UDP 是不可靠的,高速的网络传输协议。在手机客户单中,一般用在聊天类IM(Instance Message),或者视频流,语音等大数据中。TCP 可以和服务器保持长连接。一般使用Socket来进行TCP/IP开发程序,常见的套接字是AsyncSocket, BSD Socket。或者CFNetwork 都可以

在 HTTP 协议头上加上 Range 字段就可以使用断点下载,每次取得文件大小,然后设置

Range 字段,然后下载的数据追加到文件的最后。这种方式就是断点下载。

Socket 原理是什么?
AsyncSocket 是 iOS 中一个 TCP/IP 通讯的开源的套接字框架。比 BSD Socket 好用一些。

AsyncSocket 使用了 CFNetwork 中异步回调模型。所有的收发数据都是使用代理来通知。内部基于 CFNetwork 里面的 Stream 流的模式。他支持 TCP/UDP,支持 UDP 广播,组播,比如 XMPP 里面就用了 AsyncSocket 来进行底层通讯。

Cookie 原理
Cookie 类似于 Token,主要是为了让服务端能够识别当前用户。在手机上一般使用 token模式。在浏览器上比较喜欢 cookie, iOS NSUrlConnection 和 ASI 都支持 Cookie, Cookie 就是一块小的数据存储空间。

MVC
MVC 是 Model, View, Controller 的简称,主要是为了解决 Model 和 View 界面之间耦合度的问题(保证低耦合)。保证数据模型和刷新界面相对独立。Controller 就是在中间把 Model和 View 耦合在一起。因为大型软件要求 Model 尽量和界面进行独立一些。比如很多界面有列表模式,地图模式。界面有 2 分,当时数据模型就一份。

比如:iOS 常见的开发大多基于 MVC 模型,比如 Controller 去启动网络,数据处理,然后解析数据,然后建立数据模型,然后把数据模型关联到 TableViewCell 上。这种就是典型的 MVC

6. weibo/OAuth 分享原理是什么
Weibo 使用了 OAuth 网络协议。目前使用 OAuth2.0 协议。他是基于 HTTP 的一个网络认

证协议,通过 AppKey 等调用 weibo 的页面,然后用户输入账号,weibo 密码服务器返回成功后的 token。

7. 微信,支付宝,银联原理是什么微信,支付宝,银联都是在真机上使用。我们在程序中调用微信,支付宝,银联等程序,

然后给他们传入相应地参数接口,这个就是 2 个程序之间项目的传输数据。是通过 URL 进行识别的。具体他们协议都没有公开,所以我们需要他们自己的 SDK 进行开发。

8. XMPP 原理?
XMPP 是基于 Socket 套接字的一个专门聊天 IM 的协议。他支持注册,登陆,以及单聊,群组聊天功能。对图片,语音,文件支持不好,一般使用 HTTP 来进行转发一下。或者做一个 base64 编码。XMPP 是一个即时聊天框架,支持和 googletalk msn 早期的 qq 进行通讯。他内部支持重连机制(断线后自动重连)。心跳机制。内部使用 CoreData 进行数据的管理。

CoreData 是什么?
CoreData 是 Apple 自己的一个数据库管理框架,它好处是可以避免使用 sql 语句,是一个图形化的操作框架,当时从开发者角度来说,不然 FMDB/sql 直接使用 sql 语句更方便. 因

HTTP 断点下载原理

为 FMDB 可以支持支持标准的 sql 语句。支持事务 Transition,回滚 roolback 等。

CoreText 是什么?
CoreText 是 Apple 官方一个标准专业排版框架。它可以精确的处理图片,问题的位置。一般用 CoreText 用在图文混排上。

FMDB 的原理是?
FMDB 是一个开源的封装了 Apple 底层 C 的 sqlite3 数据库,他使用方便。支持标准 sql 语句,支持多线程处理,支持是事务,回滚等。

iOS各种小理论知识相关推荐

  1. IOS绘制小黄人,对绘图知识的一个练习

    IOS绘制小黄人,对绘图知识的一个练习 #define kTopX rect.size.width * 0.5 #define kTopRadius 80 #define kTopY 260// // ...

  2. 蓬莱小课:数据分析理论知识——统计学和机器学习

    想入门数据分析应该怎么学?新手做数据分析有哪些好用的工具?会用 Excel 但是做分析总是没思路怎么办?做数据分析有哪些方法...... 以上这些问题,相信各位想入门数据分析的小伙伴们或多或少都会遇到 ...

  3. FFmpeg学习(音视频理论知识)

    文章目录 1. 音视频理论知识 1.1 基本概念 1.1.1 音视频必备的基本概念 常用的视频封装格式 常用的视频编码器 常用的音频编程器: 视频流 裸数据YUV 1.1.2 音视频常见处理 采集 处 ...

  4. 数据库入门理论知识介绍以及编译安装MySql

    数据库入门理论知识介绍以及编译安装MySql 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 前言: 1.目前90%以上的公司面临的运维的瓶颈都在后端 最常见的2大瓶颈就是: 1&g ...

  5. 【Camera】Camera理论知识和基本原理

    Camera理论知识和基本原理 1. 前言 2. Basic Concepts 3. 总体流程 4. 摄像头 5. 传感器 Sensor 5.1 CCD(Charge Coupled Device) ...

  6. Web前端理论知识记录

    Web前端理论知识记录 Elena · 5 个月前 cookies,sessionStorage和localStorage的区别? sessionStorage用于本地存储一个会话(session)中 ...

  7. oracle rac理论知识

    oracle数据库高可靠性高性能的特性是很多企业需要的,这些年一直给各大政府企业做oracle咨询与规划,实施安装以及维护,回头看看,自己已经忘记大部分oracle rac的整体具体架构理论知识,现在 ...

  8. Web自动化测试理论知识

    Web 自动化理论知识 1.自动化测试概述 概念:用工具代替/辅助人工完成完成软件测试活动的过程 特点:     可以对程序的新版本自动执行回归测试     可以执行一些手工测试困难或不可能进行的测试 ...

  9. 如何将计算机专业知识和水文结合,2016水文勘测理论知识及参考答案 B卷

    理论知识及参考答案 Ⅰ.必答题(75分) 一.单选题(15分) (在每小题的空档中填入所选内容的序号,每题1分) 1.悬移质含沙量的大小对流速脉动有一定,含沙量增大,流速脉动将( A ),特别是高含沙 ...

最新文章

  1. 2009 Competition Highlights by ICPC Live
  2. The XOR Largest Pair(01trie模板题)
  3. TCP和UDP 粘包 消息保护边界
  4. Java项目:基于Jsp实现网上定餐系统
  5. 向上取整的方法_PHP取整方法小总结
  6. 中国建筑节能行业投资动向分析及运营策略规划咨询报告2021-2027年
  7. 通过ClassLoader加载硬盘上的图片到内存及ImageIO的使用
  8. python数据拟合固定参数_如何将数据拟合到非理想二极管方程(隐式非线性函数)并检索参数 - python...
  9. 高品质UI设计模板|PSD下载,设计师的最佳临摹素材
  10. php get安全过滤,php 有效安全过滤get,posd,cookie_PHP教程
  11. 后台java规范参数_详解Java后端优雅验证参数合法性
  12. 学习计算机如何有一个质的飞越?
  13. Pandas 中文API文档
  14. 冰点还原精灵免费版下载
  15. 请告诉孩子:努力读书,是为将来拥有更多选择的权利,而不是被迫谋生
  16. scam计算机术语是什么意思,外贸术语dropshipping 是什么意思?如何操作?
  17. 如何优化前端页面的LCP?
  18. 简洁的桌面整理工具(Coodesker)
  19. 手工植锡、焊接BGA芯片
  20. WiFi5 (802.11ac) Vs WiFi6(802.11ax)频宽及速率对比

热门文章

  1. python 进程与线程(理论部分)
  2. [NOI2005]维护数列 恶心到毁天灭地的splay
  3. day 68 增删改查 语法
  4. [剑指Offer] 25.复杂链表的复制
  5. vim简单命令教程-firstblood
  6. iOS - Core Animation 核心动画
  7. 基于java的数据结构学习——动态数组C++类模板(含拷贝构造,重载常见运算符)
  8. 李洋疯狂C语言之合法帧
  9. 扎实的基础是成功的法宝
  10. 面试官问我:什么是JavaScript闭包,我该如何回答