史上最全的iOS面试题及答案
IOS面试题--有答案2.doc
1、写出方法获取iOS内存使用情况。
〃获取当前设备可用内存及所占内存的头文件#import<sys/sysctl.h>#import<mach/mach.h>〃获取当前设备可用内存(单位:MB)-(double)availableMemory{vm_statistics_data_tvmStats; mach_msg_type_number_tinfoCount =HOST_V M」N FO_COUNT; kern_return_tkernRetur n =host_statistics(mach_host_self(),HOST_VM_INFO, (host_i nfo_t)&vmStats,& nfoCount);if (kernReturn != KERN_SUCCESS) {returnNSNotFound;}return ((vm_page_size *vmStats.free_count) / 1024.0) / 1024.0;} ~〃获取当前任务所占用的内存(单位:MB)-(double)usedMemory{task basic info data ttasklnfo;mach_msg_type_number_tinfoCount =TASK_BASIC_INFO_COUNT;kern_retum_tkernRetum = task_info(mach_task_self(), TASK_BASIC_INFO,(task_info_t)&tasklnfo,& infoCount);if (kernReturn != KERN_SUCCESS ){returnNSNotFound;}returntasklnfo.resident_size / 1024.0 / 1024.0;}1、深拷贝和浅拷贝的理解?深拷贝拷贝的是内容,浅拷贝拷贝的是指针。
史上最全的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面试题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基础问答面试题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⾯试题集锦(附答案)(个⼈精⼼整理)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⾯试题总结(持续更新)过段时间打算跳槽,找了⼀些⾯试题来做,在这⾥做个总结⽅便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、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面试小贴士———————————————回答好下面的足够了-------------------------------------多线程、特别是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面试题及答案
面试题1.Object-c的类可以多继承么?category是什么?重写一个类的方式用继承好还是分类好?为什么?答:Object-c的类不可以多重继承,可以用伪继承和@protocol委托来代替;可以实现多个接口,通过实现多个接口就可以完成C++的多重继承,Category 是类别,一般用分类比较好,用Category去重写类的方法,仅对本Category 有效,不会影响到其他类与原有类的关系。
伪继承必须覆盖两个方法,即methodSignatureForSelector: 和forwardInvocation:。
methodSignatureForSelector:的作用在于为另一个类实现的消息创建一个有效的方法签名。
forwardInvocation:将选择器转发给一个真正实现了该消息的对象.2.类别的作用?继承和类别在实现中有何区别?答:category可以在不获悉,不改变原来代码的情况下往里面添加新的方法,只能添加,不能删除修改。
并且如果类别和原来类中的方法产生名称冲突,则类别将覆盖原来的方法,因为类别具有更高的优先级。
类别主要有3个作用:(1)将类的实现分散到多个不同文件或多个不同框架中。
(2)创建对私有方法的前向引用。
(3)向对象添加非正式协议。
继承可以增加,修改或者删除方法,并且可以增加属性。
/* 非正式协议:是使用类别category来实现,非正式协议是NSObject的一个类别,这样任何类的对象都可以作为委托对象来使用,它可以列出对象能够执行的所有方法,这样用来实现委托,我们可以使用选择器来判断该非正式协议中是否有这个方法。
正式协议:是一个命名的方法列表,与非正式协议相比不同的是,它要求显示的采用协议,采用协议的方法是在类的@interface声明中列出协议的名称,此时,实现协议的类应该遵守协议,承诺实现协议中的所有方法。
*/3.类别和类扩展的区别?答:1."类别"比"子类"方便多了,因为对已添加category的类,使用到它或者它的子类的地方,category都会起作用;“子类”的话,则需要在使用的每个地方,创建子类对象2."类别"只能添加方法,不能加属性、变量3."类别"一般是对框架提供类的扩展(没有源码,不能修改)4."类别"一般是在不想生成一个新的子类的情况下,比如对NSArray的扩展“扩展”则相当于定义一个子类,在里面添加属性和方法4.属性readwrite,readonly,assign,retain,copy,nonatomic各是什么作用,在哪种情况下用?什么情况使用weak关键字,相比assign有什么不同?答:1> readwrite:同时生成get方法和set方法的声明和实现2> readonly:只生成get方法的声明和实现3> assign:set方法的实现是直接赋值,用于基本数据类型4> retain:set方法的实现是release旧值,retain新值,用于OC对象类型5> copy:set方法的实现是release旧值,copy新值,用于NSString、block等类型6> nonatomic:非原子性,set方法的实现不加锁(比atomic性能高)注意点:(nonatomic)非原子性访问,对属性赋值的时候不加锁,多线程并发访问会提高性能。
ios面试题及答案2020简书
ios面试题及答案2020简书我是 ios,来了一次面试题,题目很简单,主要考察的是“怎么与人沟通”。
下面是我的面试试题,一套5题(不带计算器)。
问的是你和朋友一起玩手机吧?怎么做到有联系呀?面试问题:用哪种输入法?为什么要用 macOS?一、这是你的手机号,输入法你用什么我们知道,用手机聊天,是不会用输入法的。
所以,只要是用的我们熟悉的输入法,就会跟你用一样的。
例如:我要给你发短信,用输入法里默认的输入法!只要打开“发送”栏就会弹出你想发的短信;我要发微信呀!还有一个,“在 QQ里”里面是比较常用的输入法……二、你说我用的是 pro max,你和朋友是如何做到有联系的,这是什么原因吗答案:1)手机作为一种媒介,要让人们对你有更好的印象,还是需要有一个相对统一的形象来进行描述。
2)语言可以帮助我们建立关系。
3)沟通就是语言的一种传递方式,所以我们通过文字的输入来给对方传递信息。
4)如果没有沟通,我们的交流就是无意义的,所以需要有情感色彩(如喜悦、感动、激动等)。
三、我问你用什么输入法,你是怎么知道朋友在用哪个手机号的,怎么回复他的,这个问题不能问到具体的内容,但是我感觉我问的是这个。
怎么知道我的手机号呢?比如我给朋友发了条信息,他打开手机输入了这个号码(例如####等等),我就知道他在用哪个手机号了。
这个方法效率很高,不会像问问题一样,你一上来就告诉他这些事情(例如#################’等)。
而且会给你足够多的信息去选择一个合适的方法,这样才能让他主动来问你,而且问出去也更有针对性。
我觉得很多人不愿意用输入法吧,因为它的效率太低了(至少需要十几秒才能读完一个字),而且这很可能会让事情变得更复杂和麻烦。
四、我和朋友是怎么建立关系的,你会经常和别人聊天吗会,我对我的朋友很好,我也是个特别热情的人,尤其在刚开始和别人聊天时很开心。
和别人聊天,最好是用微信这个工具。
因为微信跟朋友们保持很近的距离,能让他们知道你是一个人。
ios面试试题
1. Object-c的类可以多重继承么?可以实现多个接口么?Category是什么?重写一个类的方式用继承好还是分类好?为什么?答:Object-c的类不可以多重继承;可以实现多个接口,通过实现多个接口可以完成C++的多重继承;Category是类别,一般情况用分类好,用Category去重写类的方法,仅对本Category有效,不会影响到其他类与原有类的关系。
2. #import 跟#include 有什么区别,@class呢?#import<> 跟#import””又什么区别?答:#import是Objective-C导入头文件的关键字,#include是C/C++导入头文件的关键字,使用#import头文件会自动只导入一次,不会重复导入,相当于#include和#pragma once;@class告诉编译器某个类的声明,当执行时,才去查看类的实现文件,可以解决头文件的相互包含;#import<>用来包含系统的头文件,#import“”用来包含用户自定义文件头文件。
6.常见的object-c的数据类型有哪些,和C的基本数据类型有什么区别?如:NSInteger 和intobject-c的数据类型有NSString,NSNumber,NSArray,NSMutableArray,NSData 等等,这些都是class,创建后便是对象,而C语言的基本数据类型int,只是一定字节的内存空间,用于存放数值;NSInteger是基本数据类型,并不是NSNumber的子类,当然也不是NSObject的子类。
NSInteger是基本数据类型Int或者Long的别名(NSInteger的定义typedef long NSInteger),它的区别在于,NSInteger会根据系统是32位还是64位来决定是本身是int还是Long。
8.Objective-C如何对内存管理的,说说你的看法和解决方法?Objective-C的内存管理主要有三种方式ARC(自动内存计数)、手动内存计数、内存池。
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面试题锦集(带答案)
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面试题(附答案)
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 面试题及答案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:共有的,该实例变量谁都可以访问。
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机制使得接收者可以改变发送者的行为。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
史上最全的iOS面试题及答案
以下是为大家整理的史上最全的ios面试题及答案的相关范文,本文关键词为史上,最全,ios,试题,答案,,您可以从右上方搜索框检索更多相关文章,如果您觉得有用,请继续关注我们并推荐给您的好友,您可以在教师教学中查看更多范文。
精品文档
.
史上最全的ios面试题及答案?1.写一个nsstring类的实现
+(id)initwithcstring:(c*****tchar*)nullTerminatedcstring
encoding:(nsstringencoding)encoding;
+(id)stringwithcstring:(c*****tchar*)nullTerminatedcstring
encoding:(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线程与进程的区别和联系?
精品文档
进程和线程都是由操作系统所体会的程序运行的基本单元,系统
利用该基本单元实现系统对应用的并发性。
程和线程的主要差别在于它们是不同的操作系统资源管理方式。
进程有独立的地址空间,一个进程崩溃后,在保护模式下不会对其它进程产生影响,而线程只是一个进程中的不同执行路径。
线程有自己的堆栈和局部变量,但线程之间没有单独的地址空间,一个线程死掉就等于整个进程死掉,所以多进程的程序要比多线程的程序健壮,但在进程切换时,耗费资源较大,效率要差一些。
但对于一些要求同时进行并且又要共享某些变量的并发操作,只能用线程,不能用进程。
4堆和栈的区别
管理方式:对于栈来讲,是由编译器自动管理,无需我们手工控制;对于堆来说,释放工作由程序员控制,容易产生memoryleak。
申请大小:
栈:在windows下,栈是向低地址扩展的数据结构,是一块连续的内存的区域。
这句话的意思是栈顶的地址和栈的最大容量是系统预先规定好的,在wInDows下,栈的大小是2m(也有的说是1m,总之是一个编译时就确定的常数),如果申请的空间超过栈的剩余空间时,将提示overflow。
因此,能从栈获得的空间较小。
堆:堆是向高地址扩展的数据结构,是不连续的内存区域。
这是由于系统是用链表来存储的空闲内存地址的,自然是不连续的,而链表的遍历方向是由低地址向高地址。
堆的大小受限于计算机系统中有效的虚拟
.
精品文档
内存。
由此可见,堆获得的空间比较灵活,也比较大。
碎片问题:对于堆来讲,频繁的new/delete势必会造成内存空间的不连续,从而造成大量的碎片,使程序效率降低。
对于栈来讲,则不会存在这个问题,因为栈是先进后出的队列,他们是如此的一一对应,以至于永远都不可能有一个内存块从栈中间弹出
分配方式:堆都是动态分配的,没有静态分配的堆。
栈有2种分配方式:静态分配和动态分配。
静态分配是编译器完成的,比如局部
变量的分配。
动态分配由alloca函数进行分配,但是栈的动态分配和堆是不同的,他的动态分配是由编译器进行释放,无需我们手工实现。
分配效率:栈是机器系统提供的数据结构,计算机会在底层对栈提供支持:分配专门的寄存器存放栈的地址,压栈出栈都有专门的指令执行,这就决定了栈的效率比较高。
堆则是c/c++函数库提供的,它的机制是很复杂的。
5什么是键-值,键路径是什么
模型的性质是通过一个简单的键(通常是个字符串)来指定的。
视图和控制器通过键来查找相应的属性值。
在一个给定的实体中,同一个属性的所有值具有相同的数据类型。
键-值编码技术用于进行这样的查找—它是一种间接访问对象属性的机制。
键路径是一个由用点作分隔符的键组成的字符串,用于指定一个连接在一起的对象性质序列。
第一个键的
性质是由先前的性质决定的,接下来每个键的值也是相对于其前面的性质。
键路径使您可以以独立于模
.
最后,小编希望文章对您有所帮助,如果有不周到的地方请多谅解,更多相关的文章正在创作中,希望您定期关注。
谢谢支持!。