iOS面试题库(四)有关GCD——北风网分享

合集下载

iOS面试-多线程

iOS面试-多线程

1.NSThread相关知识2.GCD相关知识?(栅栏函数、Group、定时器、信号量、队列类型、任务派发⽅式、快速迭代、延迟处理)1.栅栏函数(控制任务的执⾏顺序)dispatch_barrier_async(queue, ^{NSLog(@"barrier");});2.延迟执⾏(延迟·控制在哪个线程执⾏)dispatch_after(dispatch_time(DISPATCH_TIME_NOW, (int64_t)(2.0*NSEC_PER_SEC)), dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0), ^{NSLog(@"---%@",[NSThread currentThread]);});3.⼀次性代码static dispatch_once_t onceToken;dispatch_once(&onceToken, ^{NSLog(@"-----");});4.快速迭代(开多个线程并发完成迭代操作)dispatch_apply(subpaths.count, queue, ^(size_t index) {});5.队列组(同栅栏函数)dispatch_group_t group=dispatch_group_create();// 队列组中的任务执⾏完毕之后,执⾏该函数dispatch_group_notify(dispatch_group_t group,dispatch_queue_tqueue,dispatch_block_t block);// 进⼊群组和离开群组dispatch_group_enter(group);//执⾏该函数后,后⾯异步执⾏的block会被gruop监听dispatch_group_leave(group);//异步block中,所有的任务都执⾏完毕,最后离开群组//注意:dispatch_group_enter|dispatch_group_leave必须成对使⽤6.信号量(并发编程中很有⽤)3.NSOperation和NSOperationQueue相关知识?(最⼤并发数、线程依赖)4.如何实现线性编程?信号量、栅栏、Dispatch_group5.说⼀下GCD并发队列实现机制?利⽤的时间⽚轮转6.NSLockNSLock遵循NSLocking协议,lock⽅法是加锁,unlock是解锁,tryLock是尝试加锁,如果失败的话返回 NO,lockBeforeDate:是在指定Date之前尝试加锁,如果在指定时间之前都不能加锁,则返回NO。

史上最全的iOS面试题及答案

史上最全的iOS面试题及答案

史上最全的iOS面试题及答案史上最全的iOS面试题及答案iOS面试小贴士———————————————回答好下面的足够了-------------------------------------多线程、特别是NSOperation 和GCD 的内部原理。

运行时机制的原理和运用场景。

SDWebImage的原理。

实现机制。

如何解决TableView卡的问题。

block和代理的,通知的区别。

block的用法需要注意些什么。

strong,weak,retain,assign,copy nomatic 等的区别。

设计模式,mvc,单利,工厂,代理等的应用场景。

单利的写法。

在单利中创建数组应该注意些什么。

NSString 的时候用copy和strong的区别。

响应值链。

NSTimer 在子线程中应该手动创建NSRunLoop ,否则不能循环执行。

UIScrollView和NSTimer组合做循环广告图轮播的时候有一个属性可以控制当上下滚动tableview的时候广告轮播图依然正常滚动。

Xcode最新的自动布局。

这个很多公司都用。

尽量自学下。

git ,和svn的用法。

git的几个命令简单的记下。

友盟报错可以查到具体某一行的错误,原理是什么。

Instrument 可以检测电池的耗电量、和内存的消耗。

的用法。

动画CABaseAnimation CAKeyAni…. CATrans….. CAGoup…. 等熟悉。

ARC的原理。

自己写过什么自定义控件就最好了。

———————————————回答好上面的足够了------------------------------------- __block和__weak修饰符的区别其实是挺明显的:1.__block不管是ARC还是MRC模式下都可以使用,可以修饰对象,还可以修饰基本数据类型。

2.__weak只能在ARC模式下使用,也只能修饰对象(NSString),不能修饰基本数据类型(int)。

iOS招聘会面试题收集

iOS招聘会面试题收集

文思海辉:
1、远程推送;本地消息和原地推送的区别
2、FBdb,有什么亮点
3、GCD
4、多线程的底层实行
5、SQLite
6、iOS7的新特性
7、iOS6和iOS7适配
8、本地缓存一般存在哪个文件下
9、沙盒下面都有哪些文件夹
10、三次握手,具体怎么交互
11、get/post
12、百度地图LBS两点之间的距离
13、发布流程
14、企业级发布
15、原理与AFN之间区别,和如何实现的
16、KVO
17、一个软件的开发流程?
18、运行时机制也问的很多
19、苹果怎么实现安全机制
20、为什么要用第三方框架
21、介绍下iOS7中增加的NSURSession?
22、地图定位怎么实现的?
众方阳光传媒集团有限公司
1、远程推送
2、极光推送原理(第三方框架),怎么用的?遇到什么问题?怎么解决的?
3、GCD底层实现原理
4、平常看什么技术博客、看什么时候
5、类似微信怎么搜索到附件的人,用地图需不需要服务器,你如何实现?北京乐宠科技有限公司
1、问网络、服务器、数据库特别多
2、TCP/IP创建连接的过程
3、微信的附近功能怎么实现的?
4、怎么实现第三方登陆
安尼梅森(北京)数码科技有限公司
1、不懂技术的人问。

ios面试题 swift

ios面试题 swift

ios面试题 swiftiOS面试题通常涉及到Swift语言的基础知识、iOS开发相关的API和框架、面向对象编程、内存管理、多线程、网络请求等方面。

以下是一些可能会被问到的iOS面试题以及它们的答案:1. 什么是Swift语言?它有哪些特性?答,Swift是由苹果公司推出的一种面向对象的编程语言,它结合了C和Objective-C的特性并且具有现代化的语法。

Swift具有类型推断、闭包、模式匹配、可选链式调用等特性。

2. 请解释一下Swift中的可选类型(Optional)。

答,在Swift中,可选类型是一种特殊的类型,它可以表示有值或者没有值。

使用可选类型可以避免空指针异常,并且在编译期间就能够发现可能的空值问题。

3. 什么是ARC(Automatic Reference Counting)?它是如何工作的?答,ARC是Swift和Objective-C中用来管理内存的一种机制,它通过计算实例的引用数量来决定是否需要释放内存。

当一个实例不再被引用时,ARC会自动释放它所占用的内存。

4. 请解释一下iOS中的MVC模式以及它们各自的作用。

答,MVC模式是一种常用的软件架构模式,它将应用程序分为模型(Model)、视图(View)和控制器(Controller)三个部分。

模型负责数据的处理和存储,视图负责展示数据,控制器负责处理用户的输入并更新模型和视图。

5. 什么是多线程?iOS中有哪些实现多线程的方式?答,多线程是指在一个应用程序中同时执行多个任务的能力。

在iOS中,可以使用GCD(Grand Central Dispatch)和Operation Queue来实现多线程。

6. 请解释一下iOS中的Core Data框架以及它的作用。

答,Core Data是苹果提供的一种数据持久化框架,它可以用来管理应用程序的数据模型,进行数据的存储和检索,并且支持数据的版本管理和数据模型的迁移。

以上是一些可能会被问到的iOS面试题以及它们的简要答案。

ios多线程面试题

ios多线程面试题

ios多线程面试题iOS开发中,多线程编程是一个重要的话题。

在面试中,考官常常会通过一些多线程相关的问题来考察候选人的多线程编程能力和对常见多线程问题的理解。

本文将就一些常见的iOS多线程面试题进行解答。

1. 什么是多线程?为什么要使用多线程?答:多线程是指在一个进程中同时执行多个任务。

在iOS开发中,多线程编程可以提高程序的性能和用户体验。

使用多线程可以实现同时进行耗时操作而不阻塞主线程,并发执行多个任务。

2. iOS中常用的多线程编程方式有哪些?答:iOS中常用的多线程编程方式有以下几种:- NSThread:基于Objective-C的线程封装,需要手动管理线程的生命周期。

- Grand Central Dispatch(GCD):基于C语言的异步编程框架,提供了一个高效、易用的多线程编程解决方案。

- NSOperationQueue:基于GCD的高级封装,使用面向对象的方式进行多线程编程,提供了更多的控制和可读性。

3. GCD的优势是什么?答:GCD相对于手动管理线程的方式,具有以下优势:- 简单易用:GCD封装了底层的线程管理,提供了简单的API,使用起来更加方便。

- 自动管理线程池:GCD会根据系统负载自动管理线程的创建和销毁,降低了开发者的负担。

- 提高性能:GCD使用队列管理任务,可以根据需要自动并发执行任务,充分利用硬件资源,提高程序性能。

4. 什么是线程安全?如何保证多线程环境下的线程安全?答:线程安全是指多线程环境下,保证共享资源的访问不会引发错误的状态或结果。

在iOS开发中,可以采取以下几种方式保证线程安全:- 加锁:通过使用互斥锁(如@synchronized、NSLock、NSRecursiveLock)或信号量(dispatch_semaphore)来保证同一时间只有一个线程访问共享资源。

- 使用线程安全的容器:如NSArray、NSDictionary的线程安全子类(如NSMutableArray、NSMutableDictionary)或使用GCD提供的线程安全的容器(如dispatch_barrier_async)。

iOS面试题(附答案)

iOS面试题(附答案)

iOS面试题(附答案)1、简述一下UIViewController的生命周期?alloc -­‐> i nit -­‐> l oadView -­‐>viewDidLoad -­‐> v iewWillAppear -­‐>viewDidAppear -­‐>viewWillDisappear -­‐>viewDidDisappear -­‐>viewUnLoad -­‐>dealloc2、#import和#include的区别?#import导入的头文件不会多次重复导入3、写一个计算A、B中较大值的标准宏MAX?#define MAX(A,B) ( (A)>(B) ? (A) : (B) )4、谈一下iOS中的多线程?多线程是指从软件或硬件上实现多个线程并发执行的技术iOS中可以使用NSThread、NSOperation、GCD实现多线程5、谈一下Objective-­‐C的内存管理方式?ARC、手动管理、线程池6、简述assign、retain、copy、weak和strong分别在什么情况下使用?答案见《iOS面试知识点整理.pdf》7、类别的作用?说一下类别和类扩展的区别?类别的作用是给类增加方法类扩展可以给类增加属性或私有变量,只可以对自定义的类使用类扩展8、说说你对KVC和KVO的理解?KVC:键值编码,提供一种机制来间接访问对象的属性KVO:键值观察,基于KVC实现的对类属性的观察监听9、深复制和浅复制的区别?答案见《iOS面试知识点整理.pdf》10、谈一下你对block的理解,请写一个block类型的属性?block本质是匿名函数声明一个block:方法一:void (^block)( N SString *string);方法二:typedef v oid(^MyBlock)(NSString *string);@property (nonatomic, s trong)MyBlock b lock;11、frame和bounds的区别?答案见《iOS面试知识点整理.pdf》12、谈一下UITableViewCell的重用机制?13、简述一下消息推送的流程?1、在苹果推送服务器APNs上注册deviceToken,并发送给自己的后台服务器;2、后台服务器将deviceToken和要发送的消息打包发送给APNs(注意:这一步还需要推送证书的路径和密码)3、A PNs将消息发送给deviceToken中保存的指定设备中的指定App14、简述一下App发布到AppStore的流程?1、首先生成发布描述文件(通过创建生产证书 -­‐> 创建AppId (Bundle I d)-­‐> 创建发布的描述文件)2、然后在iTunesContent中创建一个应用并填好信息3、在XCode中将项目打包并上传(注意:Bundle I d全程一致, 在build S etting中填好刚创建的描述文件)4、最后再回到iTunesContent中选择刚才上传的项目,然后点击提交。

iOS 面试题及答案

iOS 面试题及答案

iOS 面试题及答案1、自动释放池是什么,如何工作的?当您向一个对象发送一个autorelease消息时,cocoa就会将该对象的一个引用放入到最新的自动释放池。

它仍然是个正当的对象,因此自动释放池定义的作用域内的其他对象可以向它发送消息。

当程序执行到作用域结束的位置时,自动释放池就会被释放,池中的所有对象也就会被释放。

2、线程和进程的区别和联系?进程和线程都是由操作系统所体会的程序运行的基本单元,系统会利用该基本单元实现系统对应用的并发性。

线程和进程的主要差别在于它们是不同的操作系统资源管理方式,进程有独立的地址空间,一个进程崩溃后,在保护模式下不会对其它进程产生影响,而线程只是一个进程中的不同执行路径。

线程有自己的堆栈和局部变量,但线程之间没有单独的地址空间,一个线程死掉就等于整个进程死掉,所有多进程的程序要比多线程的程序健壮,但在进程切换时,耗费资源较大,效率要差一些。

但对于一些要求同时进行并且又要共享某些变量的并发操作,只能用线程,不能用进程。

3、属性readwrite,readonly,assign,retain,copy,nonatomic各是什么作用,在哪种情况下用?1)Readwrite是可读可写特性,需要生成getter方法和setter方法时2)Readonly是只读写特性,只会生成getter方法,不会生成setter方法,不希望属性在类外改变3)Assign是赋值特性,setter方法将传入参数赋值给实例变量,仅设置变量时4)Retain表示持有特性,setter方法将传入参数先保留,再赋值,传入参数的retaincount会+15)Copy表示赋值特性,setter方法将传入对象赋值一份,需要完全一份新的变量时6)Nonatomic非原子操作,决定编译器生成的setter,getter是否是原子操作,atomic表示多线程安全,一般使用nonatomic4、object-c中创建线程的方法是什么,如果在主线程中执行代码,方法是什么,如果想延时执行代码,方法又是什么?线程创建有三种方法:使用nsthread创建、使用gcd的dispatch创建、使用子类化的nsoperation创建,然后将其加入nsoperationqueue;在主线程执行代码,方法是performSelectorOnMainThread,如果想延时执行代码可以用performSelector:onThread:withObject:waitUntilDone5、类别的作用,继承和类别在实现中有何区别?Category可以在不获悉,不改变原来代码的情况下往里面添加新的方法,只能添加,不能删除修改;并且如果类别和原来类中的方法产生冲突,类别将覆盖原来的方法,因此类别具有更高的优先级;将类的实现分散到多个不同文件或多个不同框架中,创建对私有方法的前向引用,向对象添加非正式协议。

iOS面试及答案

iOS面试及答案

史上最全的iOS面试题及答案iOS面试小贴士———————————————回答好下面的足够了-------------------------------------多线程、特别是NSOperation 和GCD 的内部原理。

运行时机制的原理和运用场景。

SDWebImage的原理。

实现机制。

如何解决TableView卡的问题。

block和代理的,通知的区别。

block的用法需要注意些什么。

strong,weak,retain,assign,copy nomatic 等的区别。

设计模式,mvc,单利,工厂,代理等的应用场景。

单利的写法。

在单利中创建数组应该注意些什么。

NSString 的时候用copy和strong的区别。

响应值链。

NSTimer 在子线程中应该手动创建NSRunLoop ,否则不能循环执行。

UIScrollView和NSTimer组合做循环广告图轮播的时候有一个属性可以控制当上下滚动tableview的时候广告轮播图依然正常滚动。

Xcode最新的自动布局。

这个很多公司都用。

尽量自学下。

git ,和svn的用法。

git的几个命令简单的记下。

友盟报错可以查到具体某一行的错误,原理是什么。

Instrument 可以检测电池的耗电量、和内存的消耗。

的用法。

动画CABaseAnimation CAKeyAni…. CATrans….. CAGoup…. 等熟悉。

ARC的原理。

自己写过什么自定义控件就最好了。

———————————————回答好上面的足够了-------------------------------------__block和__weak修饰符的区别其实是挺明显的:1.__block不管是ARC还是MRC模式下都可以使用,可以修饰对象,还可以修饰基本数据类型。

2.__weak只能在ARC模式下使用,也只能修饰对象(NSString),不能修饰基本数据类型(int)。

3.__block对象可以在block中被重新赋值,__weak不可以。

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

北风网iOS面试题库(四)
写在前面:“分享”看似在输出,但实际上是获得更多。

用我们北风网的口号就是“不懂得分享的人,不会很快乐;不懂得分享的教育,不是好教育”。

所以,我们北风网会不定期给大家分享一些干货,所有的内容仅供学习之用,也希望大家能将“分享的精神”传递下去。

一、CGD的底层实现
(1)iOS和OS X的核心是XNU内核, GCD是基于XUN内核实现的
(2)GCD的API全部在libdispatch库中
(3)GCD的底层实现主要有Dispatch Queue 和Dispatch Source
(4)Dispatch Queue——管理block操作
(5)Dispatch Source——处理事件
二、Notification是同步还是异步?Kvo 是同步还是异步?
包括代理,这些都是同步的;监听和回调都是在同一个线程中执行。

三、Objective C中的selector是什么?
可以理解@selector() 就是取类方法的编号,他的行为基本可以等同C语言中的函数指针,只不过C语言中,可以把函数名之间赋给一个函数指针,而Objective-C的类不能之间应用函数指针,这样只能做一个@selector语法来取。

它的结果是一个SEL类型,这个类型的本质是累方法的编号(函数地址).方法以selector为索引.selector的数据类型是SEL定义成char*,我们可以把它想象成int .每个方法的名字对应
一个唯一的值。

四、iOS中哪些操作是属于私有api的范畴?
私有API是指存放在PrivateFrameworks框架中的API 是苹果明确不能使用的API 也可以说,一般在官方文档和头文件中看不到,但是实际存在于框架中的API 就是私有API,具体在提交应用的时候回自动检测。

私有API的存在很大一部分是为了保护隐私和系统安全,进制开发者使用这些功能。

但是由于Objective-C的动态特性,使得实际上不可能存在真正意义的阻止调用这些API。

五、frame和bounds有什么不同?
frame的位置是相对父空间的左上角来说的,参照的是父类的坐标系,指的是空间在父控件内的位置和大小。

bounds的位置是相对控件自身的左上角来说的,参照的是自身坐标系,指的是自己本身的大小。

六、NSTimer和GCD的定时器有什么区别?
(1)NSTimer 可以调用invalidate 进行撤销,创建和撤销必须在同一线程。

NSTimer需要将定时器添加到当前的runloop中.
它的时间单位是秒。

(2)GCD一旦执行就不能撤销。

CGD中的定时器不受runloop模式的影响。

时间单位是纳秒。

七、应用程序的沙盒下,都有哪些文件夹?它们有什么特点?本地缓存一般存在哪个文件下?
1、Documents
将应用程序的数据文件保存在该目录下.不过这些数据类型仅限于不可以再生的数据,可再生的数据文件应该存在LIbrary/Cache下
2、Library 它有两个子文件
(1)caches 主要是缓存文件,用户使用过程中缓存都可以保存在这些目录中。

保存那些可再生的文件,比如网络数据请求。

因此,应用程序通常还需要负责删除这些文件。

(2)Preferences 应用程序的偏好设置文件。

我们使用NSUserDefaults写的设置数据都会保存到该目录下的一个plist文件中,它会被iTunes同步。

3、tmp
各种临时文件,保存应用再次启动时不需要的文件。

而且当应用不在需要这些文件时应主动将其删除。

因为该目录下的东西随时有可能被系统清除,目前已知的一种可能清理的原因是系统磁盘存储空间不足的时候。

八、为什么要使用第三方框架?
(1)第三方框架的使用的优点:
1)使用第三方框架会大大的提高编码效率;
2)在完成功能时,三方框架一般性能优于我们编写的代码;
3)框架有许多值得我们学习的技术和思想。

(2)但第三方框架的使用也有缺点:比如正是因为用第三份框架,所有在使用上会遇到一
些意料之外的问题,如框架作者不在更新框架的问题。

九、谈谈你对MVC的理解?
MVC是一种设计模式,它强制的将应用程序的输入、处理、输出分开。

使用了MVC的应用程序被分为3个核心部件:试图(View)、模型(Model)、控制器(Controller)。

它们各司其职,既分工明确但又相互合作。

首先视图接受用户输入请求,然后将请求传递给控制器,控制器再调用某个模型来处理用户的请求,在控制器的控制下,再将处理后的结果交给某个视图进行格式化输出给用户。

MVC不仅实现了功能模块和显示模块的分离,同时它还提高了系统的可维护性、可扩展性和组件的可复用性.
十、plist和pct文件的好处与弊端?
(1)plist文件以便用来储存数组或者字典,它是iOS中特有的存储方式。

它可以将数据与代码隔离开,更便于数据的管理和展示。

(2)pch里面可以保存一些全局的宏和头文件。

(3)pch是预编译头文件,其中存放有工程中已有编译的部分代码;在以后建立工程时就不用重新编译这些代码。

(4)pch头文件的内容能被项目中的其他所有源文件共享访问
1)存放一些全局的宏(整个项目都用得上的宏)
2)用来包含一些全部的头文件(整个项目都用得上的头文件)
3) 能自动打开或者关闭日志的输出功能
(5)pch弊端:每个文件都会导入,有效率问题.
十一、请简述iOS动画机制
iOS分为显式动画和隐式动画——
(1)显式动画:对一些属性做指定的自定义动画,或者创建非线性动画。

比如沿着任意一条曲线移动。

(2)隐式动画:主要是作用于非根层,也就是自己手动创建的layer,当对它的一些属性进行修改时,会自动产生一些动画效果。

十二、什么是UIKit ?
(1)UIKit是iOS上的AppKit 的变种,用于为iOS 应用程序提供界面对象和控制器。

与AppKit类似,UIKit框架有UIResponder,也采用事件(UIEvent类)机制。

(2)另外,iOS上的应用程序都是一个UIApplication实例。

所有的iOS应用程序都基于UIKit ,它提供了在屏幕上绘制的机制,捕获事件,和创建通用用户界面元素。

(3)UIKit 也通过管理显示在屏幕上的组件来组织复杂的项目。

(4)使用UIKit可以:
1)构建和管理你的用户界面;
2)捕获触摸和基于移动的事件;
3)呈现文字和web内容;
4)优化你的多任务程序;
5)创建定制的用户界面元素。

十三、三此握手,具体怎么交互?
(1)首次握手:客户端发送syn(syn=j)包到服务器;并进入SYN_SEND状态,等待服务器确认。

(2)第二次握手:服务器收到syn包,确认客户的SYN(ack=j+1),同时自己也发送一个SYN包(syn=k),即SYN+ACK包,此时服务器进入SYN_RECV状态。

(3)第三次握手:客户端收到服务器的SYN+ACK包,向服务器发送确认包ACK(ack=k+1),此包发送完毕,客户端和服务器进入ESTABLISHED状态,完成三次握手。

注意:三次握手中发送的不包含数据,只有三次握手完毕,客户端和服务器才正式开始传送数据。

TCP连接一旦建立,在通信双方的任何一方主动关闭连接之前,TCP连接都将被一直保持下去。

十四、什么是安全释放?
对象被释放的时候,[_instance release],_instance = nil;
十五、在iphone上有两件事情要做,请问是在一个线程里按顺序做效率高还是两个线程里做效率高?
如果两件事有依赖关系,事件二必须等到事件一执行完毕才执行,那么放在一个线程就可以了,如果两者并没有什么关联,放到两个线程并发执行效率较高。

十六、NSArray和NSSet有何区别?
(1)NSArray : 里面存放的元素是有序的,可以有重复的对象,可以通过下标来访问里面的数组元素
(2)NSSet: 里面存放的元素是无序的,不重复的,可以通过anyObject来访问单个元素.在
搜索一个一个元素时NSSet比NSArray效率高,主要是它用到了数据结构中的哈希算法,而NSArray则是需要遍历全部的数组元素,效率会低一些.
十七、__weak什么时候用?
当两个对象互相引用的时候,一端用strong,另一端必须用weak 。

例如:A拥有B,B 也拥有A,那么必须一方使用weak。

一般UI控件都可以使用weak,因为自身已经对它进行一次强引用,没有必要再强引用一次。

十八、列举几个常用集合类和存放二进制数据类?
(1)NSArray、NSDictionary、NSSet,以及他们的可变类。

(2)存放二进制的有NSData 类。

十九、多线程,写出常用的几个类
(1)Pthread
(2)NSThread
(3)GCD
(4)NSOperationQueue
二十、一般在哪个函数中创建某个View的子view?
viewDidLoad方法。

相关文档
最新文档