iOS 面试题汇总
- 格式:pdf
- 大小:746.39 KB
- 文档页数:34
本文由我司收集整编,推荐下载,如有疑问,请与我司联系iOS 面试题总结1.app 分发方式所谓分发方式简单点讲就是你的app 都可以通过哪些途径给用户使用。
a:个人或者公司的开发者账号可以上传appStore,用户通过appStore 下载。
b:企业账号:打包分发。
c:打包到本地: product- archive /window- organizer --- import -- save for ad hoc.有一段时间由于xcode 版本问题,项目不能真机运行,就是通过打包到本地,再安装到手机上进行测试的。
需要先下载证书。
d:通过第三方:比如蒲公英。
公司组织测试的时候,就是将项目导包上传,然后通过扫码或者链接下载。
前提也是先需要下载证书。
2.UIWebView +H5 面试官问的是UIWebView 加载H5 页面需要做哪些优化。
其实这个问题需要具体问题具体分析,主要是看你页面怎么排版以及H5 页面的内容,有些问题因为H5 中自己处理了,就不再需要手动处理了。
具体详见:cnblogs/devyh/p/5392577.htmlscalesPgeToFit=yes ;//页面自适应e) { //图片下载完成} } }]; #import “SDImageCache.h”缓存图片[[SDImageCache sharedImageCache] storeImage:image forKey:@”anUrlString”toDisk:NO];4.多线程NSThread/NSOperation/GCD 具体的就不介绍了。
注:自己编写的单例需要使用GCDeg:+(SaveInfo*)shareDataModle{stati 不同之处,又有何联系?Swift 是一款易学易用的编程语言,而且它还是第一套具有与脚本语言同样的表现力和趣味性的系统编程语言Objective-C 是扩充C 的面向对象编程语言区别:语法;。
第1篇一、产品设计与创新类1. 如果桌上放置了一部旧iPhone,你能看到哪些材料?(考察应聘者对产品的洞察力和创新能力)2. 请设计一款可以解决全球饥饿问题的产品。
(考察应聘者的大局观和创新思维)3. 请用不超过10个字概括苹果公司的核心价值观。
(考察应聘者的提炼能力和对企业的理解)二、逻辑思维与问题解决类1. 如果准备了4杯水,却来了5位领导,应该如何分配?(考察应聘者的应变能力和团队协作精神)2. 帝国大厦有多重?(考察应聘者的观察力和逻辑推理能力)3. 每天有多少孩子出生?(考察应聘者的观察力和数据处理能力)三、个人价值观与职业规划类1. 你会是什么超级英雄?为什么?(考察应聘者的个性和价值观)2. 请描述你职业生涯中最难忘的一次失败经历,以及你从中学到了什么。
(考察应聘者的挫折承受能力和自我反省能力)3. 你认为自己的优势和劣势分别是什么?(考察应聘者的自我认知能力)四、沟通与团队协作类1. 如果你在团队中遇到了一个难以沟通的同事,你会如何处理?(考察应聘者的沟通能力和团队协作精神)2. 请设计一场针对苹果公司产品的发布会,包括演讲稿、PPT和现场互动环节。
(考察应聘者的策划能力和沟通能力)3. 你认为团队中最重要的是什么?(考察应聘者的团队观念和价值观)五、心理素质与抗压能力类1. 如果你在工作中遇到了一个难以解决的问题,你会如何应对?(考察应聘者的心理素质和抗压能力)2. 请描述一次你在压力下完成任务的经历,以及你如何应对压力。
(考察应聘者的心理素质和抗压能力)3. 你认为自己在面对挫折时,最需要的是什么?(考察应聘者的心理素质和抗压能力)六、社会热点与价值观类1. 如果你是苹果公司的CEO,你会如何应对当前全球贸易战?(考察应聘者的政治敏感度和全局观)2. 请谈谈你对人工智能发展的看法,以及你认为苹果公司应该如何应对?(考察应聘者的价值观和前瞻性)3. 你认为苹果公司应该如何在环保方面做出贡献?(考察应聘者的社会责任感和价值观)总之,苹果公司的奇葩面试题目不仅考验应聘者的专业知识,更考验其创新能力、应变能力和综合素质。
史上最全的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面试题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基础知识面试题合集1.#IMPORT和#INCLUDE的区别@CLASS? 32. READWRITE,READONLY,ASSIGN,RETAIN,COPY,NONATOMIC 属性的作用 33.在一个对象的方法里面:=“OBJECT”;和 NAME =”OBJECT”有什么不同吗? 34.请简述= NIL的机制,以及与[NAMERELEASE]的区别? 35.请简要说明VIEW D ID L OAD和VIEW D ID U NLOAD何时调用 36.实例化一个UIT ABLE V IEW对象,要求写出关键语句? 37.使用SQL语句查询出省名以湖开头,邮编为436001所在的市区?(5分)(表名及字段名自定义) 48.打印结果 49.用预处理指令#DEFINE声明一个常数,用以表明1年中有多少秒(忽略闰年问题) 510.写一”标准”宏MIN,这个宏输入两个参数并返回较小的一个 511.数组和指针的区别 512.STATIC的作用 513.简述内存分区情况 614.#INCLUDE<FILENAME>和#INCLUDE”FILENAME”有什么区别 615.CONST CHAR *P; CHARCONST*P; CHAR*CONST P; CONST CHAR* CONST P;四个修饰指针有什么区别 616.MVC的理解? 617.在O BJ-C中有没有私有方法?私有变量?一般采用什么方法实现? 618.OC中加号方法与减号的区别?719.FREE与RELEASE的区别720.在终端环境下,分别说明4,2,1,0对应的权限是什么721.ARC机制722.自动释放池是什么,如何工作723.V IEW C ONTROLLER 的 LOAD V IEW, VIEW D ID L OAD,VIEW D ID U NLOAD 分别是在什么时候调用的?在自定义V IEW C ONTROLLER 的时候这几个函数里面应该做什么工作?824. 浅复制和深复制的区别?//浅拷贝和深拷贝825. FRAME和BOUNDS有什么不同?826. OBJ-C的优缺点827. 用变量A给出下面的定义828. 写出几个死循环?929. 队列和栈有什么区别:930.HTTP协议中,POST和GET的区别是什么?9(核心服务层THE C ORE S ERVICES LAYER)、31. I OS的系统架构分为(核心操作系统层THE C ORE OS LAYER)、(媒体层THE M EDIA LAYER)和(C OCOA界面服务层THE C OCOA T OUCH LAYER)四个层次。
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、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面试小贴士———————————————回答好下面的足够了-------------------------------------多线程、特别是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 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。
分享10个iOS面试问题不管对于招聘和应聘来说,面试都是很重要的一个环节,特别对于开发者来说,面试中的技术问题环节不仅是企业对应聘者技能和积累的考察,也是一个开发者自我检验的好机会。
对于iOS和Mac开发来说,因为本事还算比较新,企业对于这方面的开发者需求也比较大,所以面试时的要求可能并不是很高,一般能知道一些Cocoa和OC的基本知识也就认为可以了。
但是对于一个希望拥有技术力基础的企业的iOS或者Mac开发来说,两到三个顶尖的熟练技术人员,带领一些还较为初级的开发者,共同完成项目应该是比较常见的构成。
Cocoa特别是CocoaTouch的开发,上手可以说十分容易,但是背后隐藏的细节和原理却很丰富。
一方面对于基础不够熟练和清晰(比如从一个AppDelegate开始用代码构建ViewController,或者清晰地说明栈和堆之类的概念),另一方面对于更进阶的开发知之甚少(比如多线程、网络异步处理或者Core开头的各种框架等等)。
这些内容十分重要,但是可能现在一般的iOS开发者或多或少都在这些问题上存在薄弱。
在这里我整理了一份面向于较高层级的iOS开发者的面试题目的问题清单,列出了十个应聘Leader级别的高级Cocoa/CocoaTouch开发工程师所应该掌握和理解的技术。
这份列表没有提供标准答案,因为这些问题本身就没有标准答案。
随每个人对这些内容的认识的不同和理解的差异,可以有不一样的答案。
但是最基本地,如果面对的是一名资深的Cocoa开发者,至少期望能得到的答案都是“接触过”,并且能结合自己的经验说个七七八八,达到互相能明白意图和方法的地步。
能够在其中两三个领域有不错的见解和具体的阐述的话,那是更好。
这种对于知识覆盖面和深度的考察很能真实反映出开发者的技术水平。
如果清单里的很大部分内容都是完全没接触过和没听过的话,那可能距离资深Cocoa开发这样一个阶段还尚有距离了。
那么,面试开始。
1.你使用过Objective-C的运行时编程(Runtime Programming)么?如果使用过,你用它做了什么?你还能记得你所使用的相关的头文件或者某些方法的名称吗?2.你实现过多线程的Core Data么?NSPersistentStoreCoordinator,NSManagedObjectContext 和NSManagedObject中的哪些需要在线程中创建或者传递?你是用什么样的策略来实现的?3.Core开头的系列的内容。
超全!iOS ⾯面试题汇总作者:Job_Yang之前看了很多⾯面试题,感觉要不是不够就是过于冗余,于是我将⺴⽹网上的⼀一些⾯面试题进⾏行了删减和重排,现在分享给⼤大家。
(题⺫⽬目来源于⺴⽹网络,侵删)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””⽤用来包含⽤用户头⽂文件。
3. 属性readwrite,readonly,assign,retain,copy,nonatomic 各是什么作⽤用,在那种情况下⽤用?1). readwrite 是可读可写特性;需要⽣生成getter ⽅方法和setter ⽅方法时2). readonly 是只读特性 只会⽣生成getter ⽅方法 不会⽣生成setter ⽅方法 ;不希望属性在类外改变3). assign 是赋值特性,setter ⽅方法将传⼊入参数赋值给实例变量;仅设置变量时;4). retain 表⽰示持有特性,setter ⽅方法将传⼊入参数先保留,再赋值,传⼊入参数的retaincount 会+1;5). copy 表⽰示赋值特性,setter ⽅方法将传⼊入对象复制⼀一份;需要完全⼀一份新的变量时。
6).nonatomic ⾮非原⼦子操作,决定编译器⽣生成的setter getter 是否是原⼦子操作,atomic 表⽰示多线程安全,⼀一般使⽤用nonatomic4.写⼀一个setter ⽅方法⽤用于完成@property (nonatomic,retain)NSString *name,写⼀一个setter ⽅方法⽤用于完成@property(nonatomic ,copy)NSString *name答:123456789101112- (void) setName:(NSString*) str {[str retain];[name release];name = str;}- (void)setName:(NSString *)str {id t = [str copy];[name release];name = t;}5.对于语句NSString*obj = [[NSData alloc] init]; obj 在编译时和运⾏行时分别时什么类型的对象?答: 编译时是NSString 的类型;运⾏行时是NSData 类型的对象6.常⻅见的object-c 的数据类型有那些, 和C 的基本数据类型有什么区别?如:NSInteger答:object-c的数据类型有NSString,NSNumber,NSArray,NSMutableArray,NSData等等,这些都是class,创建后便是对象,⽽而C语⾔言的基本数据类型int,只是⼀一定字节的内存空间,⽤用于存放数值;NSInteger是基本数据类型,并不是NSNumber的⼦子类,当然也不是NSObject的⼦子类。
NSInteger是基本数据类型Int或者Long的别名(NSInteger 的定义typedef long NSInteger),它的区别在于,NSInteger会根据系统是32位还是64位来决定是本⾝身是int还是Long。
7.id 声明的对象有什么特性?答:Id 声明的对象具有运⾏行时的特性,即可以指向任意类型的objcetive-c的对象;8.Objective-C如何对内存管理的,说说你的看法和解决⽅方法?答:Objective-C的内存管理主要有三种⽅方式ARC(⾃自动内存计数)、⼿手动内存计数、内存池。
1). (Garbage Collection)⾃自动内存计数:这种⽅方式和java类似,在你的程序的执⾏行过程中。
始终有⼀一个⾼高⼈人在背后准确地帮你收拾垃圾,你不⽤用考虑它什么时候开始⼯工作,怎样⼯工作。
你只需要明⽩白,我申请了⼀一段内存空间,当我不再使⽤用从⽽而这段内存成为垃圾的时候,我就彻底的把它忘记掉,反正那个⾼高⼈人会帮我收拾垃圾。
遗憾的是,那个⾼高⼈人需要消耗⼀一定的资源,在携带设备⾥里⾯面,资源是紧俏商品所以iPhone不⽀支持这个功能。
所以“Garbage Collection”不是本⼊入⻔门指南的范围,对“Garbage Collection”内部机制感兴趣的同学可以参考⼀一些其他的资料,不过说⽼老实话“Garbage Collection”不⼤大适合适初学者研究。
解决: 通过alloc – initial⽅方式创建的, 创建后引⽤用计数+1, 此后每retain⼀一次引⽤用计数+1, 那么在程序中做相应次数的release就好了.2). (Reference Counted)⼿手动内存计数:就是说,从⼀一段内存被申请之后,就存在⼀一个变量⽤用于保存这段内存被使⽤用的次数,我们暂时把它称为计数器,当计数器变为0的时候,那么就是释放这段内存的时候。
⽐比如说,当在程序A⾥里⾯面⼀一段内存被成功申请完成之后,那么这个计数器就从0变成1(我们把这个过程叫做alloc),然后程序B也需要使⽤用这个内存,那么计数器就从1变成了2(我们把这个过程叫做retain)。
紧接着程序A不再需要这段内存了,那么程序A就把这个计数器减1(我们把这个过程叫做release);程序B也不再需要这段内存的时候,那么也把计数器减1(这个过程还是release)。
当系统(也就是Foundation)发现这个计数器变成员了0,那么就会调⽤用内存回收程序把这段内存回收(我们把这个过程叫做dealloc)。
顺便提⼀一句,如果没有Foundation,那么维护计数器,释放内存等等⼯工作需要你⼿手⼯工来完成。
解决:⼀一般是由类的静态⽅方法创建的, 函数名中不会出现alloc或init字样, 如[NSString string]和[NSArray arrayWithObject:], 创建后引⽤用计数+0, 在函数出栈后释放, 即相当于⼀一3). (NSAutoRealeasePool)内存池:可以通过创建和释放内存池控制内存申请和回收的时机.解决:是由autorelease 加⼊入系统内存池, 内存池是可以嵌套的, 每个内存池都需要有⼀一个创建释放对, 就像main 函数中写的⼀一样. 使⽤用也很简单, ⽐比如[[[NSStringalloc]initialWithFormat:@”Hey you!”] autorelease], 即将⼀一个NSString 对象加⼊入到最内层的系统内存池, 当我们释放这个内存池时, 其中的对象都会被释放.9. 原⼦子(atomic)跟⾮非原⼦子(non-atomic)属性有什么区别?答:1). atomic 提供多线程安全。
是防⽌止在写未完成的时候被另外⼀一个线程读取,造成数据错误2). non-atomic:在⾃自⼰己管理内存的环境中,解析的访问器保留并⾃自动释放返回的值,如果指定了 nonatomic ,那么访问器只是简单地返回这个值。
10. 看下⾯面的程序,第⼀一个NSLog 会输出什么?这时str 的retainCount 是多少?第⼆二个和第三个呢? 为什么?1234567891011NSMutableArray* ary = [[NSMutableArray array] retain];NSString *str = [NSString stringWithFormat:@"test"];[str retain];[aryaddObject:str];NSLog(@”%@%d”,str,[str retainCount]);[str retain];[str release];[str release];NSLog(@”%@%d”,str,[str retainCount]);[aryremoveAllObjects];NSLog(@”%@%d”,str,[str retainCount]);str 的retainCount 创建+1,retain+1,加⼊入数组⾃自动+1 3retain+1,release-1,release-1 2数组删除所有对象,所有数组内的对象⾃自动-1 1property结合的时候怎样有效的避免内存泄露?答:谁申请,谁释放遵循Cocoa Touch的使⽤用原则;内存管理主要要避免“过早释放”和“内存泄漏”,对于“过早释放”需要注意@property设置特性时,⼀一定要⽤用对特性关键字,对于“内存泄漏”,⼀一定要申请了要负责释放,要细⼼心。
关键字alloc 或new ⽣生成的对象需要⼿手动释放;设置正确的property属性,对于retain需要在合适的地⽅方释放,12.如何对iOS设备进⾏行性能测试?答: Profile-> Instruments ->Time Profiler13. Object C中创建线程的⽅方法是什么?如果在主线程中执⾏行代码,⽅方法是什么?如果想延时执⾏行代码、⽅方法⼜又是什么?答:线程创建有三种⽅方法:使⽤用NSThread创建、使⽤用GCD的dispatch、使⽤用⼦子类化的NSOperation,然后将其加⼊入NSOperationQueue;在主线程执⾏行代码,⽅方法是performSelectorOnMainThread,如果想延时执⾏行代码可以⽤用performSelector:onThread:withObject:waitUntilDone:14. MVC设计模式是什么?你还熟悉什么设计模式?答:设计模式:并不是⼀一种新技术,⽽而是⼀一种编码经验,使⽤用⽐比如java中的接⼝口,iphone中的协议,继承关系等基本⼿手段,⽤用⽐比较成熟的逻辑去处理某⼀一种类型的事情,总结为所谓设计模式。