iOS面试题汇总(一)

合集下载

搜狐 2022 iOS工 程师面试题(求职面试回答资料)

搜狐 2022 iOS工 程师面试题(求职面试回答资料)

搜狐2022 iOS工程师面试题第1题:单选题1、以下哪一段代码不会抛出特别()A、NSArray *array=@[1,2,3];NSNumber * number=array[3];B、NSDictionary *dict=@{@"key":nil};C、NSString *str=nil;NSString *str2=[str substringFromIndex:3];D、NSString *str=@"hi";NSString *str2=[str substringFromIndex:3];1、CA:OC数组中的元素不能是基本数据类型,必需是对象,并且array[3]下标越界,Xcode编译时报错B:字典中键值对不能为nil,运行时崩溃C:OC中向空对象发送消息,不执行任何操作,不报错,不崩溃D:数组下标越界,运行时崩溃第2题:2、delegate中的property使用以下哪个属性()A、assignB、retainC、copyD、strong2、Adelegate中文叫做托付,通常会用在class内部把一些大事处理"托付"给别人去完成。

为什么我们不用retain而要用assign呢?缘由就是在于iOS的reference counting的环境中,我们必需解决circular count的问题。

第3题:3、C和Objective-C的混合使用,以下描述错误的是()A、cpp文件只能使用C/C++代码B、cpp文件include的头文件中,可以消失objective-C的代码C、mm文件中混用cpp直接使用即可D、cpp使用objective-C的关键是使用接口,而不能直接使用代码3、Bobj-c 的编译器处理后缀为m 的文件时,可以识别obj-c 和c 的代码,处理mm 文件可以识别obj-c,c,c++ 代码,但cpp 文件必需只能用c/c++ 代码,而且cpp 文件include 的头文件中,也不能消失obj-c 的代码,由于cpp 只是cpp第4题:4、关于Objective-C中属性的说明,以下错误的是()A、readwrite是可读可写特性,需要生成getter方法和setter方法B、readonly是只读特性,只有getter方法,没有setter方法C、assign是赋值属性,setter方法将传入参数赋值给实例变量D、retain表示持有特性,copy属性表示拷贝属性,都会建立一个相同的对象4、DCopy是创建一个新对象,Retain是创建一个指针,引用对象计数加1。

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面试题及答案

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面试题1.在一个对象的方法里面:=“object”;和name=”object”有什么不同吗?答:=”object”:会调用对象的setName()方法;name=“object”:会直接把object赋值给当前对象的name属性。

2.请简述=nil的机制,以及与[namerelease]的区别?=nil;//使用nil参数调用setName:方法[name release]生成的访问器将自动释放以前的name对象3.请简要说明viewDidLoad和viewDidUnload何时调用答viewDidLoad在view从nib文件初始化时调用,loadView在controller 的view为nil时调用。

此方法在编程实现view时调用,view控制器默认会注册memory warning notification,当view controller的任何view没有用的时候,viewDidUnload会被调用,在这里实现将retain的view release,如果是retain的IBOutlet view属性则不要在这里release,IBOutlet会负责release。

4.打印结果main(){int a[5]={1,2,3,4,5};int*ptr=(int*)(&a+1);printf(“%d,%d”,*(a+1),*(ptr-1));}答:*(a+1)就是a[1],*(ptr-1)就是a[4],执行结果是2,5&a+1不是首地址+1,系统会认为加一个a数组的偏移,是偏移了一个数组的大小(本例是5个int)int*ptr=(int*)(&a+1);则ptr实际是&(a[5]),也就是a+5原因如下:&a是数组指针,其类型为int(*)[5];而指针加1要根据指针类型加上一定的值,不同类型的指针+1之后增加的大小不同。

a是长度为5的int数组指针,所以要加5*sizeof(int)所以ptr实际是a[5]但是prt与(&a+1)类型是不一样的(这点很重要)所以prt-1只会减去sizeof(int*)a,&a的地址是一样的,但意思不一样a是数组首地址,也就是a[0]的地址,&a是对象(数组)首地址,a+1是数组下一元素的地址,即a[1],&a+1是下一个对象的地址,即a[5].5.简述内存分区情况提示:分为代码区、数据区、堆区、栈区(1)代码区:存放函数二进制代码(2)数据区:系统运行时申请内存并初始化,系统退出时由系统释放。

iOS基础问答面试题

iOS基础问答面试题

iOS基础问答面试题1.When to use NSMutableArray and when to use NSArray?什么时候使用NSMutableArray,什么时候使用NSArray?答案:当数组在程序运行时,需要不断变化的,使用NSMutableArray,当数组在初始化后,便不再改变的,使用NSArray。

需要指出的是,使用NSArray 只表明的是该数组在运行时不发生改变,即不能往NSAarry的数组里新增和删除元素,但不表明其数组內的元素的内容不能发生改变。

NSArray是线程安全的,NSMutableArray不是线程安全的,多线程使用到NSMutableArray需要注意。

2.Give us e某ample of what are delegate methods and what are data source methods of uitableview.给出委托方法的实例,并且说出UITableVIew的Data Source方法答案:CocoaTouch框架中用到了大量委托,其中UITableViewDelegate就是委托机制的典型应用,是一个典型的使用委托来实现适配器模式,其中UITableViewDelegate协议是目标,tableview是适配器,实现UITableViewDelegate协议,并将自身设置为talbeview的delegate的对象,是被适配器,一般情况下该对象是UITableViewController。

UITableVIew的Data Source方法有-(NSInteger)tableView:(UITableView 某)tableView numberOfRowsInSection:(NSInteger)section;- (UITableViewCell 某)tableView:(UITableView 某)tableView cellForRowAtInde某Path:(NSInde某Path 某)inde某Path;3.How many autorelease you can create in your application? Is there any limit?在应用中可以创建多少autorelease对象,是否有限制?答案:无4.If we don’t create any autorelease pool in our application then is there any autorelease pool already provided to us?如果我们不创建内存池,是否有内存池提供给我们?答案:界面线程维护着自己的内存池,用户自己创建的数据线程,则需要创建该线程的内存池5.When you will create an autorelease pool in your application?什么时候需要在程序中创建内存池?答案:用户自己创建的数据线程,则需要创建该线程的'内存池6.When retain count increase?什么时候内存计数会增加?答案:见iOS面试题(一)7.What are commonly used NSObject class methods?类NSObject的那些方法经常被使用?答案:NSObject是Objetive-C的基类,其由NSObject类及一系列协议构成。

iOS面试题集锦(附答案)(个人精心整理)

iOS面试题集锦(附答案)(个人精心整理)

iOS⾯试题集锦(附答案)(个⼈精⼼整理)1、第三⽅库、masonry第三⽅⾃动布局是否⽤过,类⽅法和对象⽅法的区别2、MVC机制C对M:APIC对V:OutletV对C:T arget-action,Delegate,DatasourceM对C:Notification,KVO3、runtime机制runtime是⼀套⽐较底层的纯C语⾔API, 属于1个C语⾔库, 包含了很多底层的C语⾔API。

runtime ⽤来⼲什么呢??⽤在那些地⽅呢?怎么⽤呢?runtime是属于OC的底层, 可以进⾏⼀些⾮常底层的操作(⽤OC是⽆法现实的, 不好实现)在程序运⾏过程中, 动态创建⼀个类(⽐如KVO的底层实现)在程序运⾏过程中, 动态地为某个类添加属性\⽅法, 修改属性值\⽅法遍历⼀个类的所有成员变量(属性)\所有⽅法例如:我们需要对⼀个类的属性进⾏归档解档的时候属性特别的多,这时候,我们就会写很多对应的代码,但是如果使⽤了runtime就可以动态设置!1>头⽂件利⽤头⽂件,我们可以查看到runtime中的各个⽅法!2>相关应⽤NSCoding(归档和解档, 利⽤runtime遍历模型对象的所有属性)字典–>模型(利⽤runtime遍历模型对象的所有属性, 根据属性名从字典中取出对应的值, 设置到模型的属性上)KVO(利⽤runtime动态产⽣⼀个类)⽤于封装框架(想怎么改就怎么改)这就是我们runtime机制的只要运⽤⽅向3>相关函数objc_msgSend : 给对象发送消息class_copyMethodList : 遍历某个类所有的⽅法class_copyIvarList : 遍历某个类所有的成员变量class_…..这是我们学习runtime必须知道的函数!4.必备常识1> Ivar : 成员变量2> Method : 成员⽅法从上⾯例⼦中我们看到我们定义的成员变量,如果要是动态创建⽅法,可以使⽤Method,4、strong ,weak, assign有什么区别assign:简单赋值,不更改索引计数(Reference Counting)。

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面试题(修改版1.1)

iOS面试题(修改版1.1)

iOS面试题1、IOS中的传值方式有那些?答案:属性传值、单例传值,通知传值、全局变量、代理传值,block传值2. obj-c的优缺点答: objc优点:1) Cateogies (类目)2) Posing (冒充)3) 动态识别4) 指标计算5)弹性讯息传递6) 不是一个过度复杂的 C 衍生语言7) Objective-C 与 C++ 可混合编程objc缺点:1) 不支援命名空間2) 不支持运算符重载3)不支持多重继承4)使用动态运行时类型,所有的方法都是函数调用,所以很多编译时优化方法都用不到。

(如内联函数等),性能低劣。

3. readwrite,re ado nly,assign,retain,copy,nonatomic 属性的作用?答:@property是一个属性访问声明,扩号内支持以下几个属性:1,getter=getterName,setter=setterName,设置setter与 getter的方法名2,readwrite,re ado nly,设置可供访问级别2,assign,setter方法直接赋值,不进行任何retain操作,为了解决原类型与环循引用问题3,retain,setter方法对参数进行release旧值再retain新值,所有实现都是这个顺序(CC上有相关资料)4,copy,setter方法进行Copy操作,与retain处理流程一样,先旧值release,再 Copy出新的对象,retainCount为1。

这是为了减少对上下文的依赖而引入的机制。

4.获取应用程序程序包中资源文件路径的方法:例如获取程序包中一个图片资源(apple.png)路径的方法:答: NSString *imagePath = [[NSBundle mainBundle] pathForResource:@”apple” ofType:@”png”];UIImage *appleImage = [[UIImage alloc]initWithContentsOfFile:imagePath];代码中的mainBundle类方法用于返回一个代表应用程序包的对象。

ios 常见面试题

ios 常见面试题

ios 常见面试题在iOS开发领域中,面试是评估候选人技术能力和知识水平的重要环节。

不同公司的面试题可能会有所不同,但有一些常见的面试题目是必备的。

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

一、Objective-C相关问题1. 什么是Objective-C?Objective-C是一种基于C语言的面向对象编程语言,是iOS开发的主要编程语言。

它继承了C语言的特性,并添加了面向对象的能力和语法。

2. Objective-C中的@property关键字有什么作用?@property用于自动生成成员变量的getter和setter方法。

使用@property声明的变量可以直接通过点语法访问和修改。

3. 什么是Category?Category是Objective-C中一种扩展类的机制,可以在不改变原始类的情况下向类添加新的方法。

它可以用于为系统类或者自定义类添加新的功能。

4. 什么是Delegate(代理)模式?Delegate模式是一种设计模式,用于将对象之间的通信和事件处理分离。

通过使用Delegate,可以将一些特定的行为或功能委托给其他对象来实现。

二、iOS开发相关问题1. 什么是UIKit?UIKit是一个iOS开发框架,提供了一系列用于构建用户界面的类和工具。

它是iOS应用程序的核心框架,包括了视图、控制器、动画、手势识别等功能。

2. 什么是UIViewController?UIViewController是iOS开发中用于管理视图和处理用户交互的核心类。

每个屏幕上显示的内容都由一个或多个UIViewController来管理。

3. 什么是Autolayout(自动布局)?Autolayout是一种自动布局系统,用于定义界面元素之间的相对位置和尺寸关系。

它可以适应不同尺寸的设备和不同方向的屏幕,保持界面的稳定性和一致性。

4. 什么是MVC架构?MVC(Model-View-Controller)是一种软件架构模式,用于将应用程序的逻辑分离成三个主要部分:模型、视图和控制器。

iOS开发高级程序员面试题-答案

iOS开发高级程序员面试题-答案

一、判断题(每题2分,共20分)1、UITableView能够绑定多个数据源。

(错)2、一个UIViewController可以管理多个UITableView。

(对)3、Object—c的类可以多重继承。

(错)4、objective-c类里面的方法只有两种,静态方法和实例方法。

(对)5、NSFileManager和NSWorkspace在使用时都是基于进程进行单件对象的实例化。

(对)6、用类别增加方法时,不能与原来类中的方法产生名称冲突。

(错)7、frame指的是该view在本身坐标系统中的位置和大小.(错)8、method是一个方法的名字,selector是一个组合体。

(错)9、ARC是编译特性,不是运行时特性,在编译时,编译器会自动加上释放代码。

(对)10、从iOS4之后,Safari支持全屏浏览,Siri支持普通话。

(对)二、填空题(每空2分,共20分)1、iOS是使用Objective-C语言编写的,使用该语言开发的Cocoa是一款功能强大的用户界面工具包,也是iOS的核心。

2、数组是将元素在内存中连续存放,由于每个元素占用内存相同,可以通过下标迅速访问数组中任何元素。

链表恰好相反,其中的元素在内存中不是顺序存储的,而是通过存在元素中的指针联系到一起。

3、发送同步请求,程序将停止用户交互,直至服务器返回数据完成,才可以进行下一步操作。

而发送异步请求不会阻塞主线程,会建立一个新的线程来操作,之后程序可以继续运行。

4、autorelease只是把Object放入了当前的autorelease pool中,当它被释放时,其中的所有Object都会被调用Release.5、作为Objective-C导入头文件的关键字,#import〈>用来包含系统的头文件,#import”"用来包含用户头文件。

三、简述题(每题4分,共20分)1、delegate和notification有什么区别,什么情况下使用?答:delegate:消息的发送者(sender)告知接收者(receiver)某个事件将要发生,delegate同意然后发送者响应事件,delegate机制使得接收者可以改变发送者的行为。

ios 高级面试题

ios 高级面试题

ios 高级面试题Introduction在进行 IOS 高级面试时,掌握一些常见的面试题和思路非常重要。

本文将为你提供一些常见的 IOS 高级面试题目,帮助你备战面试并展示自己的技术能力和经验。

1. Objective-C 部分Objective-C 是 IOS 开发中最常用的编程语言之一,下面是一些关于Objective-C 的高级面试题目:1.1 类与对象- 请解释 Objective-C 中类和对象的概念,并举例说明。

- 什么是类的继承?如何使用继承来实现代码的重用?- 什么是类别和扩展?它们有什么区别?- 请解释使用 @property 和 @synthesize 的作用。

1.2 内存管理- 请解释 ARC(Automatic Reference Counting)是什么?它如何帮助我们管理内存?- 什么是循环引用?如何避免循环引用的发生?- 在MRC(Manual Reference Counting)中,你是如何管理内存的?1.3 Blocks- 什么是 Blocks?它们在 IOS 开发中的具体应用是什么?- __block 和 __weak 关键字的作用分别是什么?2. Swift 部分Swift 是一种相对较新的编程语言,被广泛应用于 IOS 开发。

下面是一些关于 Swift 的高级面试题目:2.1 基础语法- 请解释Swift 中的可选类型(Optional)是什么?它们有什么作用?- Swift 中的结构体和类有什么区别?- 什么是属性观察器(property observers)?请举例说明如何使用属性观察器。

2.2 Protocols and Extensions- 请解释 Protocol 在 Swift 中的作用,并讨论它与继承的异同。

- 什么是扩展(Extension)?请举例说明如何使用扩展来为已有的类添加新的功能。

2.3 Error Handling- Swift 中的错误处理是如何工作的?请解释 try、catch 和 throw 的作用。

面试题 ios

面试题 ios

面试题 iosiOS开发面试题iOS开发是当前移动应用开发领域的热门职业之一,每年都会有大量的开发者投身于iOS开发的学习和实践。

而作为应聘者,面试是进入iOS开发行业的重要一步。

本文将为大家整理一些常见的iOS面试题,帮助应聘者在面试中更好地准备和表现。

一、Objective-C相关Objective-C是iOS开发中最常用的编程语言之一,掌握Objective-C 的基本语法对于应聘者来说至关重要。

以下是一些常见的Objective-C 面试题:1. 介绍一下Objective-C的特性和优势。

2. Objective-C中的类和对象有何区别?3. @property关键字有什么作用?如何使用它?4. @synthesize和@dynamic有何区别?5. 什么是委托模式(Delegate)?如何使用委托模式?6. 内存管理是什么?介绍一下Objective-C的内存管理方式。

7. 介绍一下ARC(自动引用计数)是什么,它解决了什么问题?8. 什么是KVC(键值编码)和KVO(键值观察)?二、iOS开发相关除了Objective-C的基础知识外,对于iOS开发相关的技术和框架的理解和掌握也是面试的重点。

以下是一些常见的iOS开发面试题:1. 介绍一下Cocoa Touch框架和iOS SDK。

2. 什么是ViewController?它有什么作用?3. 什么是生命周期方法(Lifecycle Methods)?在哪些方法中进行常见的操作?4. UITableView和UICollectionView的区别是什么?它们的代理方法有哪些?5. 在iOS中如何进行网络请求?常见的网络请求方式有哪些?6. 介绍一下Core Data框架,它可以用来做什么?7. 什么是多线程?在iOS中如何实现多线程编程?8. 介绍一下Auto Layout和Size Classes。

三、常见面试题除了技术和框架的问题,面试官还可能提出一些常见的面试题,用于了解你的思考方式和解决问题的能力。

ios 高级工程师面试题

ios 高级工程师面试题

ios 高级工程师面试题iOS 开发领域一直都是人才需求量较高的领域,而作为一个高级工程师,你需要具备一定的技术深度和广度,同时还需要有解决实际问题的能力和经验。

下面是一些常见的 iOS 高级工程师面试题,希望能帮助你更好地准备面试。

一、Objective-C 部分1. 什么是 Category,如何使用?请列举一个你在实际项目中使用Category 的例子。

2. 什么是 KVC 和 KVO?它们之间有什么区别和联系?3. 什么是Block,如何使用?请解释下循环引用问题以及解决方案。

4. 什么是 autorelease pool,在什么情况下会用到?请解释内存管理机制中的 autorelease pool 是如何工作的。

5. 什么是 Run Loop,它在 iOS 开发中的作用是什么?请说明主线程和子线程中 Run Loop 的差异。

6. 什么是 ARC,它与 MRC 的区别是什么?在 ARC 下,如何处理循环引用问题?二、Swift 部分1. 什么是 Optional 类型,如何使用?请解释为什么 Swift 中引入了Optional 类型。

2. 什么是 Protocol,如何使用?请解释下 Protocol 和 Class 之间的关系。

3. 什么是 Value Type 和 Reference Type,它们之间有什么区别和联系?4. 什么是委托模式(Delegation Pattern),如何在 Swift 中实现?5. 什么是 Swift 中的泛型(Generics)?请解释下泛型在自定义数据结构中的作用。

6. 什么是内存管理,Swift 是如何处理内存管理的?三、iOS 开发部分1. 简述 UIViewController 的生命周期方法及各个方法的调用顺序。

2. 什么是Autolayout,如何使用?请解释下Autolayout 的工作原理。

3. 什么是 Core Data,如何使用?请解释下 Core Data 的基本原理。

IOS面试题1(答案)

IOS面试题1(答案)

IOS Software Development1.Difference between shallow copy and deep copy?浅复制和深复制的区别?答案:浅层复制:只复制指向对象的指针,而不复制引用对象本身。

深层复制:复制引用对象本身。

意思就是说我有个A对象,复制一份后得到A_copy对象后,对于浅复制来说,A和A_copy 指向的是同一个内存资源,复制的只不过是是一个指针,对象本身资源还是只有一份,那如果我们对A_copy执行了修改操作,那么发现A引用的对象同样被修改,这其实违背了我们复制拷贝的一个思想。

深复制就好理解了,内存中存在了两份独立对象本身。

用网上一哥们通俗的话将就是:浅复制好比你和你的影子,你完蛋,你的影子也完蛋深复制好比你和你的克隆人,你完蛋,你的克隆人还活着。

2.What is advantage of categories? What is difference between implementing a category and inheritance?类别的作用?继承和类别在实现中有何区别?答案:category 可以在不获悉,不改变原来代码的情况下往里面添加新的方法,只能添加,不能删除修改。

并且如果类别和原来类中的方法产生名称冲突,则类别将覆盖原来的方法,因为类别具有更高的优先级。

类别主要有3个作用:(1)将类的实现分散到多个不同文件或多个不同框架中。

(2)创建对私有方法的前向引用。

(3)向对象添加非正式协议。

继承可以增加,修改或者删除方法,并且可以增加属性。

3.Difference between categories and extensions?类别和类扩展的区别。

答案:category和extensions的不同在于后者可以添加属性。

另外后者添加的方法是必须要实现的。

extensions可以认为是一个私有的Category。

4.Difference between protocol in objective c and interfaces in java?oc中的协议和java中的接口概念有何不同?答案:OC中的代理有2层含义,官方定义为formal和informal protocol。

iOS面试题1

iOS面试题1

iOS面试题1
1、objective-c中是所有对象间的交互是如何实现的?
2、如何将产品进行多语言发布,开发?
3、OC中是如何实现线程同步的?
4、编程中,保存数据有哪几种方式?
5、Sizeof与strlen的区别和联系?
Sizeof是算数运算符,strlens是函数
Sizeof返回类型以及静态分配的对象,结构,数组所占的空间,返回值和对象,数组,结构的内容没有任何的联系
Strlen是函数,要在运行是才能计算。

参数必须是字符串指针,且必须是\0结尾
6、什么是抽象类?抽象类有什么作用?能实例化吗?
7、你对@interface和@property的理解?retain, assign是什么意思?
8、MVC模式的理解
9、用预处理指令#define声明一个常数,用以表明1年中有多少秒(忽略闰年问题)
10、有时代理属性的声明是assign 为什么?
11、UIview得父类是哪一个?
12、在同一个类A中,有方法a和方法b,方法b如何调用方法a?
13、有A、B两个类,B类继承于A类,都实现了方法method1。

创建B类实例b,如何让b调用A
类的method1?
14、OC有多重继承么?不是的话有什么替代方法?
15、线程与进程的区别和联系?
16、自动释放池是什么,如何工作?
17、什么是KVC和KVO?
18、http 协议,get,post区别?
19、写一个委托Delegate的interface。

20、OC有私有方法,私有变量吗?。

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)。

1.Difference between shallow copy and deep copy?
浅复制和深复制的区别?
答案:浅层复制:只复制指向对象的指针,而不复制引用对象本身。


深层复制:复制引用对象本身。


意思就是说我有个A对象,复制一份后得到A_copy对象后,对于浅复制来说,A和A_copy指向的是同一个内存资源,复制的只不过是是一个指针,对象本身资源
还是只有一份,那如果我们对A_copy执行了修改操作,那么发现A引用的对象同样被修改,这其实违背了我们复制拷贝的一个思想。

深复制就好理解了,内存中存在了
两份独立对象本身。


用网上一哥们通俗的话将就是:
浅复制好比你和你的影子,你完蛋,你的影子也完蛋
深复制好比你和你的克隆人,你完蛋,你的克隆人还活着。

2.What is advantage of categories? What is difference between implementing a category and inheritance?
类别的作用?继承和类别在实现中有何区别?答案:category 可以在不获悉,不改变原来代码的情况下往里面添加新的方法,只能添加,不能删除修改。


并且如果类别和原来类中的方法产生名称冲突,则类别将覆盖原来的方法,因为类别具有更高的优先级。


类别主要有3个作用:
(1)将类的实现分散到多个不同文件或多个不同框架中。


(2)创建对私有方法的前向引用。


(3)向对象添加非正式协议。


继承可以增加,修改或者删除方法,并且可以增加属性。

3.Difference between categories and extensions?
类别和类扩展的区别。

答案:category和extensions的不同在于后者可以添加属性。

另外后者添加的方法是必须要实现的。


extensions可以认为是一个私有的Category。

4.Difference between protocol in objective c and interfaces in java?
obc中的协议和java中的接口概念有何不同?
答案:OBC中的代理有2层含义,官方定义为formal和informal protocol。

前者和Java接口一样。


informal protocol中的方法属于设计模式考虑范畴,不是必须实现的,但是如果有实现,就会改变类的属性。


其实关于正式协议,类别和非正式协议我很早前学习的时候大致看过,也写在了学习教程里
“非正式协议概念其实就是类别的另一种表达方式“这里有一些你可能希望实现的方法,你可以使用他们更好的完成工作”。


这个意思是,这些是可选的。

比如我门要一个更好的方法,我们就会申明一个这样的类别去实现。

然后你在后期可以直接使用这些更好的方法。


这么看,总觉得类别这玩意儿有点像协议的可选协议。

"
现在来看,其实protocal已经开始对两者都统一和规范起来操作,因为资料中说“非正式协议使用interface修饰“,
现在我们看到协议中两个修饰词:“必须实现(@requied)”和“可选实现(@optional)”。

5.What are KVO and KVC?
答案:kvc:键- 值编码是一种间接访问对象的属性使用字符串来标识属性,而不是通过调用存取方法,直接或通过实例变量访问的机制。


很多情况下可以简化程序代码。

apple文档其实给了一个很好的例子。


kvo:键值观察机制,他提供了观察某一属性变化的方法,极大的简化了代码。


具体用看到嗯哼用到过的一个地方是对于按钮点击变化状态的的监控。


比如我自定义的一个button
[cpp] [self addObserver:self forKeyPath:@"highlighted" options:0 context:nil]; #pragma mark KVO - (void)observeValueForKeyPath:(NSString *)keyPath ofObject:(id)object change:(NSDictionary *)change context:(void*)context { if ([keyPath isEqualToString:@"highlighted"] ) { [self setNeedsDisplay]; } }对于系统是根据keypath去取的到相应的值发生改变,理论上来说是和kvc机制的道理是一样的。


对于kvc机制如何通过key寻找到value:
“当通过KVC调用对象时,比如:[self valueForKey:@”someKey”]时,程序会自动试图通过几种不同的方式解析这个调用。

首先查找对象是否带有someKey 这个方法,如果没找到,会继续查找对象是否带有someKey这个实例变量(iVar),如果还没有找到,程序会继续试图调用-(id) valueForUndefinedKey:这个方法。

如果这个方法还是没有被实现的话,程序会抛出一个NSUndefinedKeyException异常错误。

(注:Key-Value Coding查找方法的时候,不仅仅会查找someKey这个方法,还会查找getsomeKey这个方法,前面加一个get,或者_someKey以及_getsomeKey这几种形式。

同时,查找实例变量的时候也会不仅仅查找someKey这个变量,也会查找_someKey 这个变量是否存在。

) 设计valueForUndefinedKey:方法的主要目的是当你使用-(id)valueForKey方法从对象中请求值时,对象能够在错误发生前,有最后的机会响应这个请求。

这样做有很多好处,下面的两个例子说明了这样做的好处。

“
来至cocoa,这个说法应该挺有道理。


因为我们知道button却是存在一个highlighted实例变量.因此为何上面我们只是add一个相关的keypath就行了,
可以按照kvc查找的逻辑理解,就说的过去了。

6.What is purpose of delegates?
代理的作用?答案:代理的目的是改变或传递控制链。

允许一个类在某些特定时刻通知到其他类,而不需要获取到那些类的指针。

可以减少框架复杂度。


另外一点,代理可以理解为java中的回调监听机制的一种类似。

7.What are mutable and immutable types in Objective C?
obc中可修改和不可以修改类型。


答案:可修改不可修改的集合类。

这个我个人简单理解就是可动态添加修改和不可动态添加修改一样。


比如NSArray和NSMutableArray。

前者在初始化后的内存控件就是固定不可变的,后者可以添加等,可以动态申请新的内存空间。

8.When we call objective c is runtime language what does itmean?
我们说的obc是动态运行时语言是什么意思?
答案:多态。

主要是将数据类型的确定由编译时,推迟到了运行时。


这个问题其实浅涉及到两个概念,运行时和多态。


简单来说,运行时机制使我们直到运行时才去决定一个对象的类别,以及调用该类别对象指定方法。


多态:不同对象以自己的方式响应相同的消息的能力叫做多态。

意思就是假设生物类(life)都用有一个相同的方法-eat;
那人类属于生物,猪也属于生物,都继承了life后,实现各自的eat,但是调用是我们只需调用各自的eat方法。


也就是不同的对象以自己的方式响应了相同的消息(响应了eat这个选择器)。


因此也可以说,运行时机制是多态的基础?~~~9.what is difference between NSNotification and protocol?
通知和协议的不同之处?
答案:协议有控制链(has-a)的关系,通知没有。


首先我一开始也不太明白,什么叫控制链(专业术语了~)。

但是简单分析下通知和代理的行为模式,我们大致可以有自己的理解
简单来说,通知的话,它可以一对多,一条消息可以发送给多个消息接受者。


代理按我们的理解,到不是直接说不能一对多,比如我们知道的明星经济代理人,很多时候一个经济人负责好几个明星的事务。


只是对于不同明星间,代理的事物对象都是不一样的,一一对应,不可能说明天要处理A明星要一个发布会,代理人发出处理发布会的消息后,别称B的
发布会了。

但是通知就不一样,他只关心发出通知,而不关心多少接收到感兴趣要处理。


因此控制链(has-a从英语单词大致可以看出,单一拥有和可控制的对应关系。

10.What is push notification?
什么是推送消息?
11.Polymorphism?
关于多态性
答案:多态,子类指针可以赋值给父类。


这个题目其实可以出到一切面向对象语言中,
因此关于多态,继承和封装基本最好都有个自我意识的理解,也并非一定要把书上资料上写的能背出来。


最重要的是转化成自我理解。

12.Singleton?
对于单例的理解
答案:11,12题目其实出的有点泛泛的感觉了,可能说是编程语言需要或是必备的基础。


基本能用熟悉的语言写出一个单例,以及可以运用到的场景或是你编程中碰到过运用的此种模式的框架类等。


进一步点,考虑下如何在多线程访问单例时的安全性。

13.What is responder chain?
说说响应链
答案:事件响应链。

包括点击事件,画面刷新事件等。

在视图栈内从上至下,或者从下之上传播。


可以说点事件的分发,传递以及处理。

具体可以去看下touch事件这块。

因为问的太抽象化了
严重怀疑题目出到越后面就越笼统。

14.Difference between frame and bounds?
frame和bounds有什么不同?
答案:frame指的是:该view在父view坐标系统中的位置和大小。

(参照点是父亲的坐标系统)
bounds指的是:该view在本身坐标系统中的位置和大小。

(参照点是本身坐标系统)15.Difference between method and selector?
方法和选择器有何不同?
答案:selector是一个方法的名字,method是一个组合体,包含了名字和实现.
详情可以看apple文档。

16.Is there any garbage collection mechanism in Objective C.?
OBC的垃圾回收机制?
答案:OBC2.0有Garbage collection,但是iOS平台不提供。


一般我们了解的objective-c对于内存管理都是手动操作的,但是也有自动释放池。

相关文档
最新文档