IOS面试题答案
ios开发工程师面试题.doc
ios开发工程师面试题经过本人最近的面试和对面试资料的一些汇总,准备记录这些面试题,以便ios开发工程师找工作复习之用,本人希望有面试经验的同学能和我同时完成这个模块,先出面试题,然后会放出答案。
1.Object-c的类可以多重继承么?可以实现多个接口么?Category是什么?重写一个类的方式用继承好还是分类好?为什么?2.#import跟#include又什么区别,@class呢;#import<>跟#import”"又什么区别?3.属性readwrite,readonly,assign,retain,copy,nonatomic 各是什么作用,在那种情况下用?4.id声明的对象有什么特性?5.MVC是什么?有什么特性?为什么在iPhone上被广泛运用?6.对于语句NSString*testObject=[[NSDataalloc]init];testObject在编译时和运行时分别时什么类型的对象?7.什么是平安释放?8.为什么有些4.0独有的objective-c函数在3.1上运行时会报错.而4.0独有的类在3.1上分配内存时不会报错?分配的结果是什么?9.为什么4.0独有的c函数在3.1的机器上运行不会报错(在没有调用的情况下?)而4.0独有的类名在3.1的机器上一运行就报错? 10.常见的object-c的数据类型有那些,和c的根本数据类型有什么区别?如:nsinteger和int11.property中属性retain,copy,assgin的含义分别是什么?有什么区别?将其转换成get/set方法怎么做?有什么考前须知?12.委托是什么?委托的property声明用什么属性?为什么?13.浅拷贝和深拷贝区别是什么?…14.NSString和NSMutableString 有什么区别?15.自动释放池跟GC有什么区别?iPhone上有GC么?[poolrelease]和[pooldrain]有什么区别?16.for(intindex=0;index<20;index++){NSString*tempStr=@”tempSt r”;NSLog(tempStr);NSNumber*tempNumber=[NSNumbernumberWithInt:2 ];NSLog(tempNumber);}这段代码有什么问题.?会不会造成内存泄露(多线程)?在内存紧张的设备上做大循环时自动释放池是写在循环内好还是循环外好?为什么?17.内存管理的几条原那么时什么?按照默认法那么.那些关键字生成的对象需要手动释放?在和property结合的时候怎样有效的防止内存泄露?18.在一个对象释放前.如果他被加到了notificationCenter中.不在notificationcenter中remove这个对象可能会出现什么问题?19.怎样实现一个singleton的类.给出思路。
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开发直播相关面试题常见问题你昨天/这周学习了什么?你为什么热衷软件开发?你对哪一种控制系统比较熟悉?与否参予过github项目?是否参与过github或其他同类型网站的ios开源项目?恳请叙述一下你的ios应用领域研发流程。
是否熟知cocoapods?它是什么?如何运行的?恳请归纳一下你对软件许可的认知,及其对软件开发的影响。
请概括一下你在构建ios应用时的测试过程。
ios应用如何实现对其他语言、日期格式以及货币单位的支持?恳请叙述一下instruments及其促进作用。
关于ios技术恳请解释一下handoff就是什么,并详述它就是如何同时实现ios、mac/网页应用领域互通的。
icloud包含了哪些技术与服务?ios拓展就是指?若想列出一些热门或常用的范例?healthkit是什么?homekit就是什么?apple pay是什么?能否描述一下如何在应用中使用apple pay?恳请解释一下ios应用领域沙盒机制。
voiceover是什么?请举例解释一下ios中的辅助功能(accessibility)。
开发者如何使用这些功能?ios应用领域就是如何同时实现后台多任务处理(multitasking)的?game center针对ios游戏有哪些功能?ibeacons就是什么?cocoa/cocoa touch是什么?恳请归纳一下core audio,core data以及core location各就是什么。
它们对ios 应用领域有何意义?请描述spritekit和scenekit的作用。
metal就是什么?响应链(responder chain)是什么?它是如何发挥作用的?按钮和其他掌控方式对哪些操作方式作出澄清?appdelegate扮演着什么样的角色?恳请解释一下nsuserdefaults。
就你而言,你可以如何在磁盘中对数组对象展开序列化?你会如何储存用户的认证信息?答何为keychain服务?。
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 初中级面试题及答案: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面试题在iOS开发领域中,百度一直以来都是一家颇具实力和创新能力的公司。
为了能够顺利通过百度的iOS面试,我们需要对百度常见的iOS 面试题进行深入了解和准备。
本文将针对百度iOS面试题展开讨论并给出相应的答案,以帮助读者在准备面试时有所依据。
1. 什么是iOS中的Autorelease Pool?它的主要作用是什么?在iOS中,Autorelease Pool(自动释放池)是一种内存管理机制,用于管理autorelease对象,即需要延迟释放内存的对象。
其主要作用是延迟内存释放,提高内存利用率和性能。
当autorelease对象被添加到Autorelease Pool中时,系统会在合适的时机(通常是在当前的runloop结束时)自动释放这些对象。
2. 请描述下iOS中的内存管理机制。
在iOS中,内存管理主要依靠引用计数来完成。
当一个对象被引用时,其引用计数会加1,当引用计数为0时,对象将会被释放。
通过retain、release和autorelease等方法可以控制对象的引用计数。
iOS中引入了ARC(自动引用计数)机制,可以自动管理对象的引用计数,从而减少手动引用计数的工作。
3. 在iOS中,什么是代理模式?请举一个例子并说明其使用场景。
代理模式是一种常用的设计模式,在iOS开发中被广泛使用。
在代理模式中,一个类可以将某些任务委托给另一个类来完成,从而实现代码的分离和解耦。
一个常见的例子是UITableView的代理模式。
UITableView的DataSource和Delegate就是典型的代理模式的应用。
UITableView的DataSource负责提供数据源,Delegate负责处理用户交互等事件。
通过代理模式,我们可以将UITableView的数据源和事件处理逻辑抽离出来,更好地实现了业务逻辑的分离和复用。
4. 在iOS开发中,什么是MVC模式?请描述一下各个组成部分的作用。
【7】IOS面试题-线程网络2
1.多线程都有哪些实现,GCD要注意些什么。
三种线程优缺点?(1)NSThread:轻量级的方式(具有很少的规则和惯例,依赖的东西少),比较底层和原始。
需要自己手动管理线程的生命周期,同步的时候需要加锁来控制线程执行顺序,会增加系统开销。
不推荐使用。
(2)NSOperationQueue:一个NSoperation对象可以通过调用start方法执行任务,默认是同步执行;也可以将NSOperation添加到一个NSOperationQueue中执行,这时是异步的。
通过这个方式开启线程后,可以中途停止、继续、取消等操作。
如果想控制线程执行顺序,可以通过添加依赖完成。
优点:不需要关心线程管理,数据同步的事情,可以把精力放在自己需要执行的操作上。
对于上传、下载这种复杂的操作,推荐使用。
(3)GCD:苹果提供的,异步执行。
提高了代码执行效率和多核的利用率,性能更好。
对于复杂的不推荐使用,但是简单的提交数据推荐使用。
2. 在哪里用过哪些第三方库,在哪获取第三库?读过第三方代码没有?在开发的过程中,用过很多第三方类库,AFNetWorking、SDWebImage、MBProgressHUD、FMDB、EGOTableViewPullRefresh、ShareSDK等。
注意:提到的可能面试官都会问到。
大多是从Github、CocoaChina地方等下载。
第三方类库主要是用它的功能,对于比较优秀的代码自己也读了一下,写的非常棒,比如。
(这个时候可以详细介绍一个你最熟悉的第三方类库)3. 多个iphone版本适配?最简单有效的方式是通过autolayout+sizeclass来进行适配的,但是这种方式的缺点需要添加的约束比较多,对于手写的代码非常麻烦。
一般手写代码进行布局的时候,会选择第三方类库来做,比如FLKAutoLayout,可以用简单的一句代码完成对一个控件添加的全部约束,非常实用。
4. 上拉加载更多,下拉刷新如何实现?用EGOTableViewPullRefresh做的,上拉的时候,从服务器取一组新的数据,加到数组中,刷新界面;下拉的时候,从服务器取数据,更新数组,刷新界面。
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面试题 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 高级工程师面试题,希望能帮助你更好地准备面试。
一、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数据库面试题
ios数据库面试题1. 介绍iOS数据库iOS数据库是指在iOS开发中使用的数据库技术。
它提供了一种存储和管理数据的方法,用于在iOS应用程序中持久地保存和检索数据。
iOS数据库常用于存储用户信息、应用程序配置、离线数据和其他需要持久存储的数据。
2. 请列举一些常见的iOS数据库- Core Data: Apple官方的数据持久化框架,提供了对象关系映射(ORM)功能,支持SQLite、XML等多种存储方式。
- SQLite: 嵌入式关系型数据库,是iOS开发中最常用的数据库之一,支持轻量级的数据库操作。
- Realm: 一种现代化的移动数据库,使用简单,性能出色,支持数据实时更新和加密。
- FMDB: 基于SQLite的封装库,提供了更简便易用的API,方便进行数据库操作。
- UserDefaults: iOS自带的轻量级数据存储方式,适用于存储少量简单数据。
3. 请说明Core Data的基本使用步骤Core Data的基本使用步骤包括:- 创建数据模型:使用Xcode的数据模型编辑器创建数据模型文件,并定义实体和属性。
- 创建NSManagedObjectContext对象:代表数据上下文,负责数据的读取、更新和删除。
- 创建NSManagedObject对象:代表数据实体对象,对应数据模型中的实体。
- 执行数据操作:通过NSManagedObjectContext对象进行数据的增删改查操作。
4. SQLite与Core Data的区别是什么?- SQLite是一种关系型数据库,需要手动编写SQL语句进行数据库操作;而Core Data是一个对象关系映射(ORM)框架,使用面向对象的方式进行数据操作,不需要手动编写SQL语句。
- SQLite需要手动管理数据库连接、事务等细节;而Core Data封装了这些细节,开发者只需操作对象即可。
- SQLite适用于简单的数据库操作,手动管理更为灵活;而Core Data适用于复杂的数据模型和关系,提供了更高级的功能和抽象。
ios面试题 block
ios面试题 blockiOS面试题:BlockBlock是Objective-C语言的一个特殊数据类型,它可以封装一段代码块,并在需要时进行调用。
在iOS开发中,Block常常被用于异步操作、回调函数以及线程间通信等场景。
下面将介绍一些常见的iOS面试题关于Block的问题以及解析。
1. 什么是Block?Block是一种封装了代码块的数据类型,它可以用来保存一段代码,并在需要时进行调用。
它类似于C语言中的函数指针,但Block可以捕获其所在作用域的变量和常量。
Block在定义时可以作为局部变量、函数参数、返回值等。
2. Block的语法格式是怎样的?Block的语法格式如下:```^returnType (parameters) {// code};```其中,^表示定义一个Block,returnType为返回值类型,parameters为参数列表,code为Block中的代码块。
3. Block的类型有哪些?在Objective-C中,Block主要有三种类型:- 全局Block:全局Block不捕获任何外部变量,可以在整个程序中使用。
- 堆Block:堆Block可以捕获外部变量,并且在内存管理方面与ARC(Automatic Reference Counting)配合使用。
- 栈Block:栈Block也可以捕获外部变量,但是只能在定义它的作用域内使用,一旦超出作用域,Block将无效。
4. Block的内存管理是怎么样的?在ARC环境下,Block的内存管理由编译器自动完成:- 全局Block存储在静态存储区,不需要手动释放。
- 堆Block为自动管理内存,当Block被复制到堆上时,它所引用的对象会自动被retain,当Block销毁时,它所引用的对象会被自动释放。
- 栈Block的内存管理需要开发者手动处理,通过Block的copy方法将其复制到堆上,然后再释放。
5. 如何解决Block的循环引用问题?由于Block会捕获其所在作用域的变量,如果在Block中直接引用了持有自身的对象,就会造成循环引用的问题。
职场_高级ios工程师面试题
高级ios工程师面试题高级ios工程师面试题(一)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中有什么函数,几个参数,作用是什么?8C高级ios工程师面试题nimation是做什么的?写一下它的层级结构(主要是写下其各种子类)?9.iOS7之前,后台执行内容有几种形式,都是什么?10.一个有序的序列M,判断其中是否有两个元素A,B的和为K?如何判断三个元素的A,B,C的和为K呢?高级ios工程师面试题(二)1. 怎么修改只读(readonly)属性变量使用KVC可以修改 kvc就是键值编码(key-value),可以通过指定的key获得想要的值value,而不是通过调用 Setter,Getter 方法访问2.KVO 除了能观察属性外,能不能观察对象不能观察对象KVO,即 Key-Value Observing, 它提供一种机制,当指定的对象的属性被修改后,则对象就会接受到通知。
简单的说就是每次指定的被观察者的对象的属性被修改后,KVO就会自动通知相应的观察者了KVO是一个对象能过观察另外一个对象的属性的值,并且能够发现值的变化。
这是一个对象与另一个对象保持同步的一种方法,即当另一种对象的状态发生改变时,观察对象马上做出反应。
ios面试题锦集(带答案)
iOS 面试题锦集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。
黑马程序员:IOS面试宝典题(1-10)
该面试宝典不仅收录了上海iOS小组成员亲身面试遇到的问题,还收录了从传智.黑马学子那里收集过来的问题。
在以后的工作中该面试宝典也会不断的更新和扩充, 当然也希望大家能够多多奉献比较优质的面试题。
1.C语言(★★)一、C语言语法1. 局部变量能否和全局变量重名?答:能,局部会屏蔽全局。
要用全局变量,需要使用"::" ;局部变量可以与全局变量同名,在函数内引用这个变量时,会用到同名的局部变量,而不会用到全局变量。
对于有些编译器而言,在同一个函数内可以定义多个同名的局部变量,比如在两个循环体内都定义一个同名的局部变量,而那个局部变量的作用域就在那个循环体内。
2.如何引用一个已经定义过的全局变量?答:extern 可以用引用头文件的方式,也可以用extern关键字,如果用引用头文件方式来引用某个在头文件中声明的全局变理,假定你将那个编写错了,那么在编译期间会报错,如果你用extern方式引用时,假定你犯了同样的错误,那么在编译期间不会报错,而在连接期间报错。
3.全局变量可不可以定义在可被多个.C文件包含的头文件中?为什么?答:可以,在不同的C文件中以static形式来声明同名全局变量。
可以在不同的C 文件中声明同名的全局变量,前提是其中只能有一个C文件中对此变量赋初值,此时连接不会出错.4.关键字volatile有什么含意?并举出三个不同的例子?一个定义为volatile的变量是说这变量可能会被意想不到地改变,这样,编译器就不会去假设这个变量的值了。
精确地说就是,优化器在用到这个变量时必须每次都小心地重新读取这个变量的值,而不是使用保存在寄存器里的备份。
下面是volatile变量的几个例子:1) 并行设备的硬件寄存器(如:状态寄存器)2) 一个中断服务子程序中会访问到的非自动变量(Non-automatic variables)3) 多线程应用中被几个任务共享的变量5.static 关键字的作用是什么?(1)函数体内static 变量的作用范围为该函数体,不同于auto 变量,该变量的内存只被分配一次,因此其值在下次调用时仍维持上次的值;(2)在模块内的static 全局变量可以被模块内所用函数访问,但不能被模块外其它函数访问;(3)在模块内的static 函数只可被这一模块内的其它函数调用,这个函数的使用范围被限制在声明它的模块内;(4)在类中的static 成员变量属于整个类所拥有,对类的所有对象只有一份拷贝;(5)在类中的static 成员函数属于整个类所拥有,这个函数不接收this 指针,因而只能访问类的static 成员变量。
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(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:私有的,该实例变量只能在该类内访问,其他类内不能访问。
@public:共有的,该实例变量谁都可以访问。
苹果公司的11个面试问题
苹果公司的11个面试问题1.桌上有台旧的iPhone,你能看到哪些材料?职位:产品设计工程师在苹果,作为一个产品设计工程师,你要绞尽脑汁将产品成本降到最低,以保持较低的产品价格。
你必须知道如何在一定资金范围内让产品定价更有竞争力。
熟悉材料也可以帮助你在降低成本的同时,做出更好的产品。
2.说说你用过的苹果产品职位:销售苹果从来不会聘用一个从没使用过苹果产品的销售人员。
3.在新机测试中,有500种垫圈都被判NG(不合格),你要如何找出问题的根源,并且怎么解决它?职位:产品质量工程师作为一个质保人员,你必须确保自己能够解决任何问题。
一旦问题滞留到生产阶段,造成的损失不上万也得上千了。
4.在一个资源非常有限的环境下,你怎么实现一个作为用户空间框架的线程模型来处理诸如网络、文件系统、UI系统等事项?职位:软件工程师写运行代码很容易,但要保证它运行流畅则要花点功夫,尤其是为手机设计软件。
5.如何诊断缓冲溢出?职位:软件工程师这是判定一个工程师是否足够优秀的最佳问题。
6.有100盏灯泡,它们都是亮着的。
接下来,第一轮你每隔一盏灯就转换开关,第二轮每隔三盏转换开关(第一轮被关掉的灯泡可能会在第二轮时被重新打开),两轮后会有多少盏是亮着的?职位:高级软件工程师这个数学问题有点复杂,谁能告诉我答案么?7.你如何接收最新的科技讯息?职位:Macgenius(苹果店内“天才吧”的Mac顾问)当你在苹果商店向消费者展示产品操作时,人们可能会问你对TechCrunch,甚至是BusinessInside上一些苹果新闻的看法。
8.一个6X6宫格图,你从左上角出发,目的地是右下角。
中途只可以往右或者向下移动,能有多少路线到达终点?职位:高级软件工程师看来,高级软件工程师都得会做数学题啊。
小编是没希望了··不过苹果给出这个问题并不一定是要你给出答案,他们注重的是你的思考过程。
9.如何证实曲面曲率的连续性?职位:CADSculptor(CAD制图员)CADSculptor需要与设计师一样对产品追求完美,即使是一块玻璃的形状也要精益求精。
苹果面试时的15道趣味考题
江苏人才求职,企业招聘首选网站苹果面试时的15道趣味考题据外国媒体报道,谷歌在招聘员工和工程师时,往往会问求职者有关技术方面的问题。
苹果却大不相同,总是会司会问一些脑筋急转弯风格的问题,提出一些与硬件规格相关的问题,此举似乎更多的是希望从潜在的员工身上挖掘更多的创造力。
苹果的这些问题不仅针对技术人员,甚至还针对销售人员和其他特殊人员。
以下就是美国网站提供的苹果在面试应聘人员的最有趣味性的15道题目:1、桌上放置了一部旧iPhone,你能看到哪些材料?职位:产品设计工程师。
在苹果公司工作的多数员工,都会了解供应链的成本事务,以确保尽可能地减少生产手机的产品成本。
苹果手机是极具价格竞争优势的产品,所以你必须知道如何从事控制成本相关的工作。
因此,具备专业的材料及其属性相关的经验将有助于你在生产手机设备时降低成本。
2、描述使用苹果产品的情况职位:销售员。
如果你想销售苹果产品,最好已经是苹果用户。
无论如何,苹果不会聘用一个从未使用苹果手机的人来担任公司的销售员工。
3、如果测试部门否决了500台洗衣机,那么你将如何查找根源并找到解决之道?职位:产品质量工程师。
如果在生产中发生了故障,就可能会导致数百部i 手机受损,甚至也可能会此起成千上万的收入受损。
如果你想管理产品质量,那么就必须确保你能够发现所有产生的问题,特别是那些在供应链初期阶段就出现的问题。
4、你如何在资源非常有限的环境下将处理网络、文件系统、用户界面系统等的线程模型转化成用户空间框架?职位:软件工程师。
编写运营程序的代码较为容易,但是要让它有效的工作就会很难了,特别是当你为手机设计软件时,你必须依赖低功率的芯片来确保电池寿命延长。
5、你如何计算来自中国的苹果供应量?职位:材料项目经理。
江苏人才求职,企业招聘首选网站他们正在探讨字面意义上的苹果,如你所知,就是水果。
不过,这也是一道非常基础的供应问题。
如果你负责管理供应链,那么你就需要确切的知道供应商供应何种产品、以及能够提供什么样的材料。
苹果面试官30问
苹果面试官30问苹果面试官30问1、你会如何向8岁的孩子解释路由器的工作原理?2、你最好的朋友是谁?3、如果你有两个鸡蛋,在不摔碎的前提下如何搞清楚它们可以从多高的高度扔下去不会碎?你有几个解决方案?4、形容一个你解决过的有趣的问题,并且详述你是如何解决的?5、每天都有多少孩子出生?6、桌子上有100枚硬币,其中有10枚朝上,90枚朝下,如何在不触摸不看的情况下找出哪些硬币是朝上的?如何将这些硬币分成朝上硬币数量相同的两堆?7、形容下你自己,是什么激励了你?8、如果我们雇用你,你最想做什么样的工作?9、有三个箱子,一个放着苹果,一个放着橘子,另外一个放着苹果和橘子。
这三个箱子被打乱顺序无法分出哪个箱子装着什么?你该如何在只打开一个箱子并取出其中一个水果的前提下,马上知道这些箱子里装的是什么水果?10、你正在面对一个生气的顾客,这个顾客在等待我们的服务的时候等待了20分钟,这让她很烦躁,并宣称她将去百思买或者微软的零售店买其他公司的电脑,你会怎么处理这个情况?11、你会怎么降低(公司)笔的费用成本?12、如果有个顾客带着他完全无法使用的老旧电脑来寻求我们的帮助,你会怎么处理?13、你觉得自己聪明么?14、描述你曾失败的一次经历,你从中获得什么样的教训?15、你曾对上司的决定表达过不同意么?你是如何表达的?举个例子并且阐述下你是如何处理的',结果是什么?16、你把一杯装满水的水杯放在转盘上,最先发生的是杯子从转盘上滑落还是水溅出来?17、你生命中最自豪的一件事是什么?18、我们为什么要雇用你?19、你觉得自己是有创意的人么?你曾想过什么有创意的事情呢?20、描述一个能体现你谦卑的事情。
21、解决顾客的问题和给顾客创造良好的体验,哪一个更重要?22、苹果为什么将公司名字AppleComputer Incorporated改成Apple Inc?23、展示一下你是如何帮助顾客的。
24、是什么让你走到了现在?25、这四年来你过的最好的一天是哪一天?最不好的是哪一天?26、当你作为顾客走进苹果零售店,你会首先注意到什么?27、你为什么想要加入苹果,如果苹果雇用你,你会想念上一份工作的什么部分?28、你是如何挑选自己喜欢的应用?29、接下来5年你想得到什么?30、你是怎么测试面包机的?。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
1.init,loadview,viewdidload, viewwillappear,viewdidappe ar,viewwilldisappear,viewdi ddisapear,dealloc
dealloc ,移除观察者. 观察者不会随着对象的消失而销毁.
2.nsthread,nsopeartionque ue,GCD
子线程刷新UI. self perfromselectorOnMainThre ad
gloabol_queue(){
get_main_queue(){
//刷新UI
};
}
3.使用Instruments观察内存使用.
5.KVO 观察者模式. KVC
键值对. obj setvalue forkey
6.相同:instancetype id都是返回一个对象
不同: instancetype 确定对象.本类id 返回不确定对象
instancetype 不能做参数id 可以做参数
7.strong
8.浅复制 retain+1
深复制重新开辟空间.复制出来另一个对象
9.把网络请求,封装到一个类里面
10.sqlite FMDB,coredata
plist nsuserdefault 沙盒归档. 写文件
11.block就是一个匿名函数.可以将block 像变量一样,进行传递.
@property (nonatomic,copy)void
(^block)(NSString *string);
12.bouns 就是0,0坐标frame,是相对于父视图的一个坐标
15.uibutton—>uicontrol—>uiview->uirespons e->nsobject
17. 1.注册账号,交99刀成为开发者.
2.做上线证书
3.在ituns connet,新建APP,把相关内容,填充
4.使用Xcode,archive—>提交到APP store
5.提交审核,周期大约是两周内
6.如果被打回,会有原因.针对原因进行修改
7.再提交
8.上线成功.ready for sale
9.后期维护,在这个APP之下,添加一个新的版本,提交审核
18.封装,继承,多态.
iOS中多态,没有重载. 重载:通过参数的类型,来选择不同的方法.
iOS中,只有重写.ios中,所有的函数,都
是虚函数,都可以进行重写.
19.MVC ,代理,通知中心,单例.
MVC 是model ,view,controller相分离,实现高内聚,低耦合的思想.
model —> controller
view —> controller
model —x—view
代理:做回调,一对一
怎么写一个代理:1.写一个协议
2.代理类—>delegate —>delegate performancSelector
3.被代理类—>遵守协议—>设置代理—>实现代理方法
通知中心.观察者模式.一对多.也可以做回调
1.addObserver “string”
2.postnotification “string”
3.在添加了观察者的地方,执行方法
4.在dealloc,移除观察者
单例:数据共享,很多地方都要使用到得一个对象.这个对象,只会在程序生命周期中实例化一次.
NSfileManager,FMDB,uiapplication
+(instancetype)shareInstace
{
static id _s;
@(synchronize)
{
if(_s == nil)
{
_s = [[[self
class]alloc]init];
}
}
return _s; }。