iOS各种小理论知识


page1image1016

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

page2image12528

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,那么用户体验差,解决方法是启动线程在后台使用滤镜算法处理图像,一旦处理完就通知主线程刷新界面.在比如:网络下载数据,由于网络状态好坏时间会不确定,那么我们需要使用线程来处理这种不确定的关系,一定数据接收完成,那么就可以通知主线程处理。再比如读取数据全国电话号码数据库,时间很长,那么就需要通过线程来做特别强调的是,线程不是快。是为了给用户一个快得假象

page3image8536


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 都可以

page4image10104


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 就是在中间把 ModelView 耦合在一起。因为大型软件要求 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 语句更方便.

page5image12264

HTTP 断点下载原理


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

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

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

page6image3160

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/458596.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

libev 宏展开

想看源码,宏太多,看着累,宏展开,再看,功力时间不够,先放下 放上宏展开后的代码。 libev4.20 展开方示为 ./configure 修改makefile文件,字符串 替换CC为 CPP 注意要把基础的CC定义保留 make mv …

FreeRTOS高级篇7---FreeRTOS内存管理分析

原文:http://blog.csdn.net/zhzht19861011/article/details/51606068 内存管理对应用程序和操作系统来说都非常重要。现在很多的程序漏洞和运行崩溃都和内存分配使用错误有关。 FreeRTOS操作系统将内核与内存管理分开实现,操作系统内核仅规定了必要的内…

笔试题

1.是不是一个父类写了一个virtual 函数,如果子类覆盖它的函数不加virtual ,也能实现多态? virtual修饰符会被隐形继承的。private 也被集成,只事派生类没有访问权限而已。virtual可加可不加。子类的空间里有父类的所有变量(static除外)。同一个函数只存…

FreeRTOS学习笔记——互斥型信号量

来自:http://blog.csdn.net/xukai871105/article/details/43456985 0.前言 在嵌入式操作系统中互斥型信号量是任务间资源保护的重要手段。下面结合一个具体例子说明FreeRTOS中的互斥型信号量如何使用。 【相关博文】 【FreeRTOS STM32移植笔记】 【FreeRTOS学习笔记…

JSP动态网站环境搭建应用中的详细步骤(Tomcat和Apache/IIS的整合)

链接地址:http://www.cnblogs.com/dartagnan/archive/2011/03/25/2003426.html JSP动态网站环境搭建应用中的详细步骤(Tomcat和Apache/IIS的整合)sun推出的JSP(Java Server Pages)是一种执行于服务器端的动态网页开发技术,它基于J…

关于JS获取select值的两种实现方法

前几天发了一篇关于javascript获取select值的方法&#xff0c;后来发现有另一种实现方法&#xff0c;所以就都发出来比较一下&#xff1a; 方法一&#xff1a;通过获取option标签的value值来确定&#xff1a; <!DOCTYPE html> <html> <head><meta charset…

c语言题库1

1. 用预处理指令#define 声明一个常数&#xff0c;用以表明1年中有多少秒&#xff08;忽略闰年问题&#xff09; #define time (365*24*60*60) #define SECONDS_PER_YEAR (60 * 60 * 24 * 365) 2. 写一个“标准”宏MIN&#xff0c;这个宏输入两个参数并返回较小的一个。 #di…

FreeRTOS系列第19篇---FreeRTOS信号量

来自&#xff1a;http://blog.csdn.net/zhzht19861011/article/details/50835613 本文介绍信号量的基础知识&#xff0c;详细源码分析见《FreeRTOS高级篇6---FreeRTOS信号量分析》 1.信号量简介 FreeRTOS的信号量包括二进制信号量、计数信号量、互斥信号量&#xff08;以后简称…

mysql语法替换字符串

UPDATE ht_business_task SET url REPLACE ( url, &amp;, & )转载于:https://www.cnblogs.com/lz20150121/p/5030739.html

POJ1274 The Perfect Stall(二分图)

题意&#xff1a; 一些奶牛只有在特定的围栏中才能产奶&#xff0c;要求合理安排使能产奶的奶牛数达到最大。 要点&#xff1a; 二分图裸题&#xff0c;最近刚学了二分图&#xff0c;看下面的参考博客&#xff0c;写的比较好&#xff1a; 参考博客&#xff1a;匈牙利算法 15479…

蓝牙HCI剖析(一)

来自&#xff1a;http://blog.csdn.net/xiaoxiaopengbo/article/details/51334257 一.HCI介绍 HCI提供了访问bluetooth control的统一接口&#xff0c;通俗来讲&#xff0c;就是定义了特定的格式来控制蓝牙芯片来做相应的动作&#xff08;比如inquiry,connect,disconnect&#…

c语言题库2

96. struct name1{ char str; short x; int num; } struct name2{ char str;0 1 2 3 int num; 4 5 6 7 short x; 8 9 10 11 } sizeof(struct name1)? sizeof(struct name2)? 8、12 97. 读文件file1.txt的内容&#xff08;例如&#xff09;&#xff1a; 12 34 56 …

ASP.NET状缓存Cache的应用-提高数据库读取速度

ASP.NET状缓存Cache的应用-提高数据库读取速度 原文:ASP.NET状缓存Cache的应用-提高数据库读取速度一、 Cache概述 既然缓存中的数据其实是来自数据库的&#xff0c;那么缓存中的数据如何和数据库进行同步呢&#xff1f;一般来说&#xff0c;缓存中应该存放改动不大或者对…

2016年学习Linux决心书(老男孩教育在线课程班第二期)

我经过这4-5个月的学习后&#xff0c;我一定要达到月薪20&#xff2b;&#xff0c;为了达到这个目标我要付出如下10大行动&#xff1a;1.提前预习上课内容2.上课认真听讲&#xff0c;做好上课笔记3.课后认真做总结&#xff0c;完善笔记5.反复做实验&#xff0c;并写实验文档6.学…

WPF XAML 从零开始认识XAML

来自&#xff1a;http://blog.csdn.net/aoshilang2249/article/details/44158403 剖析最简单的XMAL代码: [html] view plaincopy <Window x:Class"MyFirstApplication.MainWindow" xmlns"http://schemas.microsoft.com/winfx/2006/xaml/presentati…

c语言题库3

143. 枚举元素本身由系统定义了一个表示序号的数值&#xff0c;从0 开始顺序定义为0&#xff0c;1&#xff0c;2…。如在weekday中&#xff0c;sun值为0&#xff0c;mon值为1&#xff0c; …,sat值为6。 main(){  enum weekday  {   sun,mon,tue,wed,thu,fri,sat  } a,b…

入门级----测试的执行、环境的搭建、每日构建、测试记录和跟踪、回归测试、测试总结和报告...

测试用例的准备&#xff0c;都是为了执行测试准备的。 测试环境的搭建 &#xff08;1&#xff09;测试数据&#xff1a;有些测试需要使用大批量的数据&#xff0c;例如容量测试、压力测试等。根据产品的具体测试要求&#xff0c;可能需要在数据库表插入大量的数据&#xff0c;准…

MFC读取配置文件GetPrivateProfileString

VC中 3 个主要 写入/读取配置文件ini的函数&#xff1a;bool WritePrivateProfileString(LPCTSTR lpAppName,LPCTSTR lpKeyName,LPCTSTR lpString,LPCTSTR lpFileName);写入.ini文件&#xff1b;DWORDGetPrivateProfileString(LPCTSTR lpAppName,LPCTSTR lpKeyName,LPCTSTR lpD…

UESTC 250 windy数 数位dp

题目链接 1 #include<bits/stdc.h>2 using namespace std;3 #define mem1(a) memset(a, -1, sizeof(a))4 #define ll long long5 int dp[20][20], digit[20], len;6 ll dfs(int len, int pre, bool fp, bool first) { //first表示前面的数是否全部为0&#xff0c; pr…

c语言面试题大全

C语言面试题大汇总 4. static有什么用途&#xff1f;&#xff08;请至少说明两种&#xff09; 1.限制变量的作用域(DL:使其只在定义的当前文件中起作用&#xff0c;static是只能由与变量在同一个文件中定义的程序存取的全局变量。也就是说使全局变量成为文件的私有变量&#…