北风网iOS面试题库(五)

合集下载

iOS常见面试提问

iOS常见面试提问

1、frame bouns 区别在view中画出区别frame: 该view在父view坐标系统中的位置和大小。

bounds:该view在本地坐标系统中的位置和大小center:该view的中心点在父view坐标系统中的位置和大小。

2、代理、单例手写代码3、设计模式延迟加载监听 kvo mvc4、深拷贝浅拷贝区别举例开发工程中哪些实现了这些 ios中哪个实现了深拷贝5、动画 view中哪里可以实现动画6、layer 与view的区别7、绘制图片文字你的思路8、你站在开发者角度为啥需要设计代理9、retain 与copy的区别10、多线程 nsthread nsoperetation gcd11、block __block为啥需要这个12、数据库实现中遇到的问题13、使用过的开源api 以及使用时遇到的问题以及是怎么解决的14、使用代理的好处为啥要使用代理与通知的区别15、同步队列异步队列区别16、怎么解决版本手机兼容性问题1.写一下UIButton与UITableView的层级结构2.Cocoa的Foundation对象与Core Foundation对象通过什么关键字进行转换?这些关键字有什么区别?3.KVO是什么?内部是怎么实现的?4.是否可以把比较耗时的操作放在NSNotificationCenter中处理?为什么?应该如何处理?5.利用NSOperation与NSOperationQueue处理多线程时,有3个NSOperation分别为A,B,C,要求A,B执行完之后,才执行C,如何做?6.在非ARC中,可以对哪些对象加上autorelease关键字,它的作用是什么?被autorelease修饰的对象什么时候释放?7详细说明一下App启动过程,从main文件开始说起.main中有什么函数,几个参数,作用是什么?8CAAnimation是做什么的?写一下它的层级结构(主要是写下其各种子类)?9.iOS7之前,后台执行内容有几种形式,都是什么?10.一个有序的序列M,判断其中是否有两个元素A,B的和为K?如何判断三个元素的A,B,C的和为K呢?1.你使用过Objective-C的运行时编程(Runtime Programming)么?如果使用过,你用它做了什么?你还能记得你所使用的相关的头文件或者某些方法的名称吗?用过一些比较简单的功能,替换对象的Method,使用AssociatedObject来传值,根据一个Class来获取它的propertyList等等。

ios面试题

ios面试题

ios面试题iOS开发是近年来非常热门和具有挑战性的技术领域之一。

在面试过程中,面试官通常会提出一系列的iOS面试题,以评估应聘者的技术能力和经验。

本文将介绍一些常见的iOS面试题,并提供详细的解答。

1. 请解释MVC设计模式在iOS开发中的作用及优势。

答:MVC(Model-View-Controller)是一种常用的软件设计模式,用于将应用程序的数据、用户界面和业务逻辑进行分离。

在iOS开发中,MVC设计模式有以下作用和优势:- 分离数据和界面:将数据(Model)和用户界面(View)进行分离,使得设计更加清晰和可维护。

- 降低耦合性:通过Controller充当数据和界面之间的中介,实现它们之间的解耦。

- 提高重用性:由于数据、界面和业务逻辑分离,可以更方便地对它们进行重用,提高开发效率。

- 方便协同开发:开发团队可以根据MVC的结构,分工协作,保证项目的高效进行。

2. 请解释UIKit和Foundation框架的区别。

答:UIKit和Foundation是iOS开发中两个重要的框架。

- UIKit是一个用户界面框架,提供了开发iOS应用程序的基础组件,如按钮、标签、文本框等。

它是建立在Core Graphics和Core Animation之上,用于构建用户友好的界面。

- Foundation是一个基础框架,提供了iOS开发中常用的核心功能和数据结构,如字符串处理、日期处理、文件管理等。

它是建立在C语言的基础上,为iOS开发者提供了一系列方便的API。

3. 请解释iOS的生命周期及其对应的方法。

答:iOS应用的生命周期指的是应用从启动到关闭的整个过程,常见的生命周期方法有以下几个:- `application:didFinishLaunchingWithOptions:`:应用程序加载完成后第一个调用的方法,用于初始化应用的数据和设置。

- `applicationWillEnterForeground:`:应用从后台返回前台时调用,可以在该方法中进行数据更新和界面刷新等操作。

IOS面试题总结201505资料

IOS面试题总结201505资料

********************************************mrc给arc传对象在mrc中生成这个对象时添加autorelease********************************************多继承实现OC为单继承,实现多继承可以通过协议代理实现********************************************tableview的优化1.cell重用UITableView是UIScrollView的子类,因此它可以自动响应滚动事件(一般为上下滚动)。

它内部包含0到多个UITableViewCell对象,每个tablecell展示各自的内容。

当新cell需要被显示时,就会调用tableView:cellForRo wAtIndexPath:方法来获取或创建一个cell;而不可视时,它又会被释放。

由此可见,同一时间其实只需要存在一屏幕的cell对象即可,不需要为每一行创建一个cell。

所以,取cell得时候优先从缓存池根据标识取,取不到再创建新的c ell。

cell被重用时,它内部绘制的内容并不会被自动清除,因此你可能需要调用setNeedsDisplayInRect:或setNeedsDisplay方法。

2.加载图片的时候用懒加载,比如用SDWebImage View异步延迟从网络取素材的时间3.数据分页显示,即上拉加载更多4.列表与详情页,使用lazy load(懒加载,延迟加载)5.数据通过多线程异步获取6.如果cell高度是一定的,可以设置TableView中ro wHeight属性,不使用tableView:heightForRowAtI ndexPath:这个方法,减少调用时间7.使用不透明的视图不透明的视图可以极大地提高渲染的速度。

因此如非必要,可以将tablecell及其子视图的opaque属性设为YES(默认值)。

iOS工程师面试题

iOS工程师面试题

1.谈谈你对多线程开发的理解?iOS中有几种实现多线程的方法?好处:1、使用线程可以把程序中占据时间长的任务放到后台去处理,如图片、视频的下载2、发挥多核处理器的优势,并发执行让系统运行的更快、更流畅,用户体验更好缺点:1、大量的线程降低代码的可读性,2、更多的线程需要更多的内存空间3、当多个线程对同一个资源出现争夺的时候要注意线程安全的问题。

iOS有三种多线程编程的技术:1、NSThread(两种创建方式)[NSThread detachNewThreadSelector:@selector(doSomething:) toTarget:self withObject:nil];NSThread *myThread = [[NSThread alloc] initWithTarget:self selector:@selector(doSomething:) object:nil];[myThread start];2、NSOperationQueueNSOperationQueue *oprationQueue = [[NSOperationQueue alloc] init];oprationQueue addOperationWithBlock:^{//这个block语句块在子线程中执行}3、Grand Central Dispatch (GCD)dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRI ORITY_DEFAULT, 0), ^{// 耗时的操作dispatch_async(dispatch_get_main_queue(), ^{// 更新界面});});PS:不显示的创建线程的方法:用NSObject的类方法performSelectorInBackground:withObject: 创建一个线程:[Obj performSelectorInBackground:@selector(doSomething) withObject:nil];1.线程同步和异步的区别?IOS中如何实现多线程的同步?同步:一个线程要等待上一个线程执行完之后才能执行当前的线程,生活中的例子(上厕所)。

ios面试题及答案

ios面试题及答案

ios面试题及答案1.uiview 和 calayer 是什么关系?•uiview 继承 uiresponder,而 uiresponder 是响应者对象,可以对ios 中的事件响应及传递,calayer 没有继承自 uiresponder,所以 calayer 不具备响应处理事件的能力。

calayer 是 quartzcore 中的类,是一个比较底层的用来绘制内容的类,用来绘制ui•uiview 对 calayer 封装属性,对 uiview 设置frame、center、bounds 等位置信息时,其实都是uiview 对 calayer 进一层封装,使得我们可以很方便地设置控件的位置;例如圆角、阴影等属性, uiview就没有进一步封装,所以我们还是需要去设置 layer 的属性来实现功能。

•uiview 是 calayer 的代理,uiview 持有一个 calayer 的属性,并且是该属性的代理,用来提供一些 calayer行的数据,例如动画和绘制。

2.bounds 和 frame 的区别?•bounds:一般是相对于自身来说的,是控件的内部尺寸。

如果你修改了 bounds,那么子控件的相对位置也会发生改变。

•frame :是相对于父控件来说的,是控件的外部尺寸。

3.setneedsdisplay 和 layoutifneeded 两者是什么关系?[图片上传失败...(image-fe66cb-)]uiview的setneedsdisplay和setneedslayout两个方法都是异步执行的。

而setneedsdisplay会自动调用drawrect方法,这样可以拿到uigraphicsgetcurrentcontext进行绘制;而setneedslayout会默认调用layoutsubviews,给当前的视图做了标记;layoutifneeded 查找是否有标记,如果有标记及立刻刷新。

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

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

史上最全的iOS面试题及答案1. 1.写一个NSString类的实现+ (id)initWithCString:(c*****t char *)nullTerminatedCStringencoding:(NSStringEncoding)encoding;+ (id) stringWithCString: (c*****t char*)nullTerminatedCStringencoding: (NSStringEncoding)encoding{NSString *obj;obj = [self allocWithZone: NSDefaultMallocZone()];obj = [obj initWithCString: nullTerminatedCString encoding: encoding];return AUTORELEASE(obj);}2static 关键字的作用:(1)函数体内 static 变量的作用范围为该函数体,不同于 auto 变量,该变量的内存只被分配一次,因此其值在下次调用时仍维持上次的值;(2)在模块内的 static 全局变量可以被模块内所用函数访问,但不能被模块外其它函数访问;(3)在模块内的 static 函数只可被这一模块内的其它函数调用,这个函数的使用范围被限制在声明它的模块内;(4)在类中的 static 成员变量属于整个类所拥有,对类的所有对象只有一份拷贝;(5)在类中的 static 成员函数属于整个类所拥有,这个函数不接收 this 指针,因而只能访问类的static 成员变量。

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

程和线程的主要差别在于它们是不同的操作系统资源管理方式。

进程有独立的地址空间,一个进程崩溃后,在保护模式下不会对其它进程产生影响,而线程只是一个进程中的不同执行路径。

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

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

史上最全的iOS面试题及答案以下是为大家整理的史上最全的ios面试题及答案的相关范文,本文关键词为史上,最全,ios,试题,答案,,您可以从右上方搜索框检索更多相关文章,如果您觉得有用,请继续关注我们并推荐给您的好友,您可以在教师教学中查看更多范文。

精品文档.史上最全的ios面试题及答案?1.写一个nsstring类的实现+(id)initwithcstring:(c*****tchar*)nullTerminatedcstringencoding:(nsstringencoding)encoding;+(id)stringwithcstring:(c*****tchar*)nullTerminatedcstringencoding:(nsstringencoding)encoding{nsstring*obj;obj=[selfallocwithZone:nsDefaultmallocZone()];obj=[objinitwithcstring:n ullTerminatedcstringencoding:encoding];returnAuToReLeAse(obj);}2static关键字的作用:(1)函数体内static变量的作用范围为该函数体,不同于auto 变量,该变量的内存只被分配一次,因此其值在下次调用时仍维持上次的值;(2)在模块内的static全局变量可以被模块内所用函数访问,但不能被模块外其它函数访问;(3)在模块内的static函数只可被这一模块内的其它函数调用,这个函数的使用范围被限制在声明它的模块内;(4)在类中的static成员变量属于整个类所拥有,对类的所有对象只有一份拷贝;(5)在类中的static成员函数属于整个类所拥有,这个函数不接收this指针,因而只能访问类的static成员变量。

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

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

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

北风网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。

ios初中级面试题

ios初中级面试题

以下是几个常见的iOS 初中级面试题及答案:Q: What is Objective-C? A: Objective-C is a general-purpose programming language that was developed by Apple and is used to develop iOS and macOS applications.Q: What is Swift? A: Swift is a programming language that is also used to develop iOS and macOS apps.Q: What is MVC? A: Model-View-Controller (MVC) is a design pattern that separates data and functionality into three separate layers: model, view, and controller.Q: What is the difference between Cocoa Touch and UIKit? A: The main difference between Cocoa Touch and UIKit is that UIKit provides a library of graphical controls for building user interfaces while Cocoa Touch is a framework for developing touch-based apps on iOS and macOS.Q: How do UIAlertViews work in iOS? A: UIAlertViews are used to display messages to users, usually when an error occurs or as a confirmation prompt.Q: What is the delegate pattern? A: The delegate pattern is a way for one object to communicate with another object without knowing its class directly.Q: How does auto layout work in iOS? A: Auto layout is a feature of Interface Builder that allows developers to specify constraints for the layout of UI elements in the interface.。

iOS面试题总结(持续更新)

iOS面试题总结(持续更新)

iOS⾯试题总结(持续更新)过段时间打算跳槽,找了⼀些⾯试题来做,在这⾥做个总结⽅便review,希望能对要⾯试的童鞋有帮助。

以下为⾯试题:1. 运⾏以下代码会有什么结果NSString *str1 = @"str1";NSString *str2 = [NSString stringWithFormat:@"str1"];NSString *str3 = @"str1";NSLog(@"str1 == str2 --- %d", str1 == str2);NSLog(@"str1 == str3 --- %d", str1 == str3);NSLog(@"str1 isEqualToString str2 --- %d", [str1 isEqualToString:str2]);NSLog(@"str1 isEqualToString str3 --- %d", [str1 isEqualToString:str3]); 第⼀眼看这道题,只能确定使⽤isEqualToString:来⽐较字符串是⽐较每⼀个字符,所以isEqualToString肯定是true,⽽在OC⾥使⽤==号⽤于判断是否指向同⼀个地址,那么问题就来了,使⽤字⾯量创建的字符串与调⽤⽅法创建的有什么区别呢? 实践出真知,⽼⽼实实敲代码,打上断点来⼀探究竟 可以看到使⽤字⾯量创建的字符串为常量字符串,⽽⽤⽅法创建的则是指针字符串。

常量字符串会在app销毁后释放,在app存在期间会⼀直存在,且相同的常量字符串都指向同⼀个地址。

运⾏结果就如下了 2. 以下⽅式创建的timer有什么区别[NSTimer scheduledTimerWithTimeInterval:1.f repeats:YES block:^(NSTimer * _Nonnull timer) {//创建⼀个timer并且在当前的runloop中执⾏。

史上最全的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面试题及答案2020简书

ios面试题及答案2020简书

ios面试题及答案2020简书我是 ios,来了一次面试题,题目很简单,主要考察的是“怎么与人沟通”。

下面是我的面试试题,一套5题(不带计算器)。

问的是你和朋友一起玩手机吧?怎么做到有联系呀?面试问题:用哪种输入法?为什么要用 macOS?一、这是你的手机号,输入法你用什么我们知道,用手机聊天,是不会用输入法的。

所以,只要是用的我们熟悉的输入法,就会跟你用一样的。

例如:我要给你发短信,用输入法里默认的输入法!只要打开“发送”栏就会弹出你想发的短信;我要发微信呀!还有一个,“在 QQ里”里面是比较常用的输入法……二、你说我用的是 pro max,你和朋友是如何做到有联系的,这是什么原因吗答案:1)手机作为一种媒介,要让人们对你有更好的印象,还是需要有一个相对统一的形象来进行描述。

2)语言可以帮助我们建立关系。

3)沟通就是语言的一种传递方式,所以我们通过文字的输入来给对方传递信息。

4)如果没有沟通,我们的交流就是无意义的,所以需要有情感色彩(如喜悦、感动、激动等)。

三、我问你用什么输入法,你是怎么知道朋友在用哪个手机号的,怎么回复他的,这个问题不能问到具体的内容,但是我感觉我问的是这个。

怎么知道我的手机号呢?比如我给朋友发了条信息,他打开手机输入了这个号码(例如####等等),我就知道他在用哪个手机号了。

这个方法效率很高,不会像问问题一样,你一上来就告诉他这些事情(例如#################’等)。

而且会给你足够多的信息去选择一个合适的方法,这样才能让他主动来问你,而且问出去也更有针对性。

我觉得很多人不愿意用输入法吧,因为它的效率太低了(至少需要十几秒才能读完一个字),而且这很可能会让事情变得更复杂和麻烦。

四、我和朋友是怎么建立关系的,你会经常和别人聊天吗会,我对我的朋友很好,我也是个特别热情的人,尤其在刚开始和别人聊天时很开心。

和别人聊天,最好是用微信这个工具。

因为微信跟朋友们保持很近的距离,能让他们知道你是一个人。

2022年最新iOS面试题(附答案)

2022年最新iOS面试题(附答案)

2022年最新iOS ⾯试题(附答案)最近⼤家都要准备去⾯试或者已经在⾯试的,这⾥我给⼤家准备了挺多资料,可以私信我拿,看看了解下。

底下就是我整理出来的⼀些⾯试题iOS 类(class )和结构体(struct )有什么区别?Swift 中,类是引⽤类型,结构体是值类型。

值类型在传递和赋值时将进⾏复制,⽽引⽤类型则只会使⽤引⽤对象的⼀个"指向"。

所以他们两者之间的区别就是两个类型的区别。

举个简单的例⼦,代码如下有想要领取免费资料的可以进裙或者加好友领取,这⾥有⼀个iOS交流圈: 可以来了解,分享BAT,阿⾥⾯试题、⾯试经验,讨论技术,裙⾥资料直接下载就⾏, ⼤家⼀起交流学习!有想要的⾯试资料或者其他资料也可以找我,欢迎咨询!需要的可⾃⾏下载A.sick() 上⾯这段代码,由于 Temperature 是 class ,为引⽤类型,故 A 的 temp 和 B 的 temp指向同⼀个对象。

A 的 temp修改了,B 的 temp 也随之修改。

这样 A 和 B 的 temp 的值都被改成了41.0。

如果将 Temperature 改为 struct,为值类型,则 A 的 temp 修改不影响 B 的 temp。

内存中,引⽤类型诸如类是在堆(heap)上,⽽值类型诸如结构体实在栈(stack)上进⾏存储和操作。

相⽐于栈上的操作,堆上的操作更加复杂耗时,所以苹果官⽅推荐使⽤结构体,这样可以提⾼ App 运⾏的效率。

class有这⼏个功能struct没有的:class可以继承,这样⼦类可以使⽤⽗类的特性和⽅法 类型转换可以在runtime的时候检查和解释⼀个实例的类型 可以⽤deinit来释放资源⼀个类可以被多次引⽤ struct也有这样⼏个优势:结构较⼩,适⽤于复制操作,相⽐于⼀个class的实例被多次引⽤更加安全。

⽆须担⼼内存memory leak或者多线程冲突问题什么是GCD ?谈谈你对GCD 的理解?GCD是Grand Central Dispatch的缩写。

ios(OC部分)经典面试题大全【范本模板】

ios(OC部分)经典面试题大全【范本模板】

Objective_C 经典面试题一、简答题1、Objective—C的类可以多重继承么?可以采用多个协议么?不可以多重继承,可以采用多个协议。

2、#import和#include的区别是什么?#import<> 跟#import""有什么区别?#import能避免头文件被重复包含的问题:1。

一般来说,导入objective c的头文件时用#import,包含c/c++头文件时用#include.使用include要注意重复引用的问题:class A,class B都引用了class C,class D若引用class A与class B,就会报重复引用的错误。

2. #import确定一个文件只能被导入一次,这使你在递归包含中不会出现问题。

所以,#import比起#include的好处就是它避免了重复引用的问题。

所以在OC 中我们基本用的都是import。

#import〈> 包含iOS框架类库里的类,#import"”包含项目里自定义的类。

3、Category是什么?扩展一个类的方式用继承好还是类目好?为什么?Category是类目。

用类目好,因为继承要满足a is a b的关系,而类目只需要满足a has a b的关系,局限性更小,你不用定义子类就能扩展一个类的功能,还能将类的定义分开放在不同的源文件里,用Category 去重写类的方法,仅对本Category有效,不会影响到其他类与原有类的关系。

4、延展是什么?作用是什么?延展(extension):在自己类的实现文件中添加类目来声明私有方法.5、类实例(成员)变量的@protected ,@private,@public声明各有什么含义?@protected:受保护的,该实例变量只能在该类和其子类内访问,其他类内不能访问。

@private:私有的,该实例变量只能在该类内访问,其他类内不能访问。

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开发面试时,掌握常见的iOS面试题目及答案是至关重要的。

下面将为你提供一些常见的iOS面试题目及详细的答案,帮助你更好地准备面试。

1. 什么是ARC,它与MRC的区别是什么?ARC即自动引用计数(Automatic Reference Counting),它是一种编译器特性,用于自动管理对象的内存管理。

ARC通过在编译时自动添加与释放内存相关的代码,从而解决了手动引用计数(MRC)方式下可能出现的内存泄漏和野指针等问题。

MRC是手动引用计数(Manual Reference Counting)的缩写,使用开发者自己手动管理对象的内存,包括手动retain、release和autorelease等操作。

主要区别:- ARC是编译器特性,而MRC则需要手动编写内存管理代码;- ARC不需要考虑retain和release的使用,编译器会自动生成;- ARC需要使用强、弱、循环引用修饰符来帮助编译器处理引用关系。

2. 请解释一下iOS中的设计模式。

iOS中常用的设计模式如下:- MVC(Model-View-Controller):将应用程序分为模型、视图和控制器三个部分。

模型负责数据处理和逻辑,视图负责界面展示,控制器负责连接模型和视图,并处理用户交互。

- Delegate(委托):通过委托模式,允许一个对象代表或协助另一个对象执行某些任务或接收某些事件通知。

- Singleton(单例):确保一个类只有一个实例,并提供一个全局访问点。

- Observer(观察者):定义对象间的一对多依赖关系,当一个对象状态发生变化时,其他依赖的对象会收到通知。

- Factory(工厂):通过工厂方法创建对象,隐藏具体的实现细节,降低代码之间的耦合。

3. 请解释一下iOS中的代理模式。

在iOS开发中,代理模式是一种常用的设计模式,它通过委托机制,将一些特定的任务或事件的实现交给其他对象来处理。

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

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

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

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

一、用一个属性引用UI控件的时候为什么可以用weak?controller 是被系统用强指针引用者,只要它存在,那么里面的子控件也就存在,controller 强引用着它的view controller,又强引用着它的数组对象subviews,数组对象又强引用着它所包含的数组内容,那么创建出来的一个UI控件将其加入subviews的时候,那么就会被一个强指针所引着它对于内存的合理使用,当我们需要控件的时候就已经有一个强引用在引用着它,我们就不必再弄一个强指针来强引用它;当我们不需要的时候,weak直接释放掉,用strong的话就还会保留它,这就占着内存了.二、UITableView 性能优化的原理iOS设备内存有限,如果使用UIT ableView显示非常多的数据,就需要非常多的UI TableViewcell那么设备的内存就会耗尽,解决该问题就需重用UITableView 对象。

当滚动出列表的时候,部分UIT ableViewCell 会移出窗口,UITableView会将窗口外的UITableVIewcell 放入一个对象缓存池中;当UITableView 要求dataSource 返回UIT ableView时,dataSource 会先查看缓存池中是否有未使用的UITableViewCell ,有就用新的数据配置这个UITableViewCell 重新使用到窗口,这就避免了重新创建对象。

三、什么是抽象类?有什么作用?能实例化吗?1、抽象类:abstract修饰,它只能用来作父类,本身并没有生成实例的能力它将一类最公有的属性和方法抽取出来抽象类是将类共有的方法抽取出来,声明为抽象方法, 抽象方法只有声明没有具体的实现, 拥有抽象方法的类就是抽象类; 这样新增一种类型时候只需要继承抽象类,实现抽象方法就可以了,降低了实现新类的难度。

抽象方法修饰符abstract 抽象类不能被实现如果一个类中没有包含足够的信息来描绘一个具体的对象,这样的类就是抽象类2、抽象类作用:(1)用于类型隐藏在面向对象领域,抽象类主要用来进行类型隐藏。

我们可以构造出一个固定的一组行为的抽象描述,但是这组行为却能够有任意个可能的具体实现方式。

这个抽象描述就是抽象类。

(2)用于拓展对象的行为功能这一组任意个可能的具体实现则表现为所有可能的派生类(子类),模块可以操作一个抽象体。

由于模块依赖于一个固定的抽象体,因此它可以是不允许修改的;同时,通过从这个抽象体派生,也可扩展此模块的行为功能。

四、objc中向一个nil对象发送消息会发生什么?如果没有返回值,nothing will happen;如果有返回值,基本数据类型返回0/0.0/NO等,对象类型返回nil,总的来说就是返回一个假的东西。

五、runloop和线程有什么联系?Runloop和线程的关系:一个Runloop对应着一条唯一的线程问题:如何让子线程不死回答:给这条子线程开启一个RunloopRunloop的创建:主线程Runloop已经创建好了,子线程的runloop需要手动创建Runloop的生命周期:在第一次获取时创建,在线程结束时销六、什么是懒汉模式,一般用在哪些地方?懒加载,指得是需要用到的时候才加载,其好处是节省内存空间,不必一开始就创建所有的变量,用到了就创建一块内存,同时也加快了程序运行速度.一般用于我们只需要创建一次的变量就可以的地方,例如字典转模型的数组,以及控制器的view等,都是懒加载的七、常用的延时执行的几种方式?perform selectorNSTimerGCD:dispatch_after八、写出你想到的设计模式,并简要描述?单例模式:不管怎么创建,拿到的对象都是同一个MVC : MVC把软件系统分为三个部分:Model,View,Controller。

MVC有低耦合性、高重用性、可维护性等优点代理模式: 代理模式就是实现消息传递的一种机制,委托方有一些任务自己不想完成,但是还需要要实现,则将该任务存放到协议中,由代理完成.但是代理并不会主动的执行任务,需要委托方通知代理,然后代理完成委托方交给的任务.观察者模式:经典观察者模式定义了一种一对多的依赖关系,让多个观察者对象同时监听某一个主题对象。

这个主题对象在状态上发生变化时,会通知所有观察者对象,使它们能够自动更新自己或者做出相应的一些动作。

比如KVO,通知中心九. 是否使用过CoreText或者CoreImage等?如果使用过,请谈谈你使用CoreText或者CoreImage的体验?用过CoreText是用于处理文字和字体的底层技术。

Quartz能够直接处理字体(font)和字形(glyphs),将文字渲染到界面上,它是基础库中唯一能够处理字形的模块。

因此,CoreText 为了排版,需要将显示的文本内容、位置、字体、字形直接传递给Quartz。

相比其它UI 组件,由于CoreText直接和Quartz来交互,所以它具有高速的排版效果。

coreImage是IOS5中新加入的一个Objective-c的框架,提供了强大高效的图像处理功能,用来对基于像素的图像进行操作与分析. iOS提供了很多强大的滤镜(Filter),其中IOS5中有48种,而到了最新的IOS6 Filter已经增加到了93种之多,并且这一数字会继续增加。

这些Filter提供了各种各样的效果,并且还可以通过滤镜链将各种效果的Filter叠加起来,形成强大的自定义效果,如果你对该效果很满意,还可以子类化滤镜十. POST、GET的区别?(1)POST : 将参数放在请求体中,参数的大小原则上没有限制一般传输的数据包含隐私相关的用POST(2)GET : 将参数附加在URL后面,因为URL长度的限制,所以参数的大小是有限制的,通常不能超过1KBGET 在请求URL后面以? 的形式跟上发给服务器的参数,多个参数之间用&隔开十一、有网络链接的应用中,在取得数据后将json字符串通过框架转为NSDictionary或NSArray,很多人直接使用这些数据来更新UI,说说这样做的缺点,并给出解决办法?(1)在书写的时候有可能写错Key值或者数组角标;(2)扩展性不好,且不符合MVC思想;(3)会造成数据的重复下载,消耗用户的流量,降低用户体验;(4)如果没有网络或者网络堵塞,那么UI界面接受不到任何数据,显示不了任何内容,用户体验糟糕。

解决的办法:(1)通过框架转换为字典或者数组后,在转化模型,并进行二级缓存,需要显示的时候从沙盒中取;(2)利用框架字典转模型重写命名十二、id声明的对象有什么特征?(1)id声明的对象具有运行时的特性,即可用指向任意类型的Objcetive-c的对象,与C中void*的万能指针相似.(2)在编译阶段不知道它的真实类型,运行时才能知道它的真实类型,所以id类型也不能使用点语法是编译时特性,而且id是运行时特性十三、你碰到那些导致程序闪退的原因?如何定位闪退的位置?1、程序闪退的原因?(1)函数无线递归(2)运行时,找不到方法(没实现)(3)访问了某个已经被释放的对象(4)程序占用内存或CPU过高(5)子线程阻塞主UI线程过久(6)从Bundle加载了不存在或者不支持的对象2、如何定位闪退的位置?(1)在设置断点的地方,选Add Exception Breakpoint.之后crash就会停在出错的位置. (2)如果是在测试阶段报错的话,可以在(设置- 通用-关于本机-诊断与用量)里面看到崩溃的堆栈信息.(3)如果用RAC的话,访问到已经释放了的内存,和内存警告这2种粗出错的几率高一些十四、如何实现圆角矩形?有哪些方法可以实现扇形View?直接修改view的样式,系统提供好的了yer.cornerRadius = 6;yer.masksToBounds = YES;用layer做就可以了,十分简单.需要库QuartzCore.framework;画矩形直接利用UIBezierPath给我们封装好的路径方法(x,y)点决定了矩形左上角的点在哪个位置(width,height)是矩形的宽度高度bezierPathWithOvalInRect:CGRectMake(x, y, width, height)[UIBezierPath bezierPathWithOvalInRect:CGRectMake(50, 50, 100, 100)];圆角矩形的画法多了一个参数,cornerRadiuscornerRadius它是矩形的圆角半径.通过圆角矩形可以画一个圆.当矩形是正方形的时候,把圆角半径设为宽度的一半,就是一个圆。

UIBezierPath*path = [UIBezierPathbezierPathWithRoundedRect:CGRectMake(50,50,100,100) cornerRadius:50];扇形:画扇形的方法为:先画一个圆孤再添加一个一根线到圆心,然后关闭路径.关闭路径就会自动从路径的终点到路径的起点封闭起下用填充的话,它会默认做一个封闭路径,从路径的终点到起点.[path fill];十五、Cocoa Touch提供了哪几种CoreAnimation过渡类型?Cocoa Touch提供了4中Core Animation 分别是交叉淡化推挤显示和覆盖.十六、能否向编译后得到的类中增加实例变量?能否向运行时创建的类中添加实例变量,为什么?不能向编译后得到的类中增加实例变量因为编译后的类以及注册在runtime中,类结构同中objc_ivar_list实例变量的链表和instance_size实例变量的内存大小已经确定同时runtime会调用class_setlvarLayout或class_setWeakIvarLayout来处理strong weak 引用。

所以不能向存在的类中添加实例变量能向运行时创建的的类添加实例变量运行时创建的类是可以添加实例变量,调用class_addIvar 函数。

但是得在调用objc_allocateClassPair 之后,objc_registerClassPair 之前,原因同上。

十七、请写出你调试解决crash问题的思路及步骤?1)把问题拆分成多个小问题,一步步检验,直到找到问题的根源点2)程序运行后,查看log信息,找到错误的地方3)在错误的地方设置断点进行调试,可以加条件断点4)查看断点运行的信息,进行修改5) 如果是在测试阶段报错的话,可以在(设置-通用-关于本机-诊断与用量)里面看到崩溃的堆栈信息。

相关文档
最新文档