iOS面试笔记面试题汇总Word下载.docx
《iOS面试笔记面试题汇总Word下载.docx》由会员分享,可在线阅读,更多相关《iOS面试笔记面试题汇总Word下载.docx(43页珍藏版)》请在冰点文库上搜索。
![iOS面试笔记面试题汇总Word下载.docx](https://file1.bingdoc.com/fileroot1/2023-4/29/51574331-2eab-49e7-bbe8-d17219def505/51574331-2eab-49e7-bbe8-d17219def5051.gif)
}
[UIViewcommitAnimations];
2.写一个内联函数,将字符串@“#ff3344”换成相应的UIColor对象
-(UIColor*)getColor:
(NSString*)hexColor
{
unsignedintred,green,blue;
NSRangerange;
range.length=2;
range.location=0;
[[NSScannerscannerWithString:
[hexColorsubstringWithRange:
range]]scanHexInt:
&
red];
range.location=2;
green];
range.location=4;
blue];
return[UIColorcolorWithRed:
(float)(red/255.0f)green:
(float)(green/255.0f)blue:
(float)(blue/255.0f)alpha:
[self.viewsetBackgroundColor:
[selfgetColor:
FF0000"
]];
3.将字符串@“abcdefghijklmn”中的efg截取出来替换攒成gfe
NSString*str=@"
abcdefghij"
;
[strreplace:
@"
efg"
@“gfe”];
4.写一个取当前日期的方法,输入字符串,格式如下2010-02-19
//获取当前时间
NSDate*nowDate=[NSDatedate];
//格式化日期,其实就是利用一个日期格式化对象把日期转换成字符串了
//先定义一个NSDateFormatter对象,然后给这个格式对象定义成自己想要的格式,然后用它去转化其他日期即可
NSDateFormatter*format1=[[NSDateFormatteralloc]init];
[format1setDateFormat:
yyyy/MM/ddHH:
mm:
ss"
];
NSString*str1=[format1stringFromDate:
nowDate];
NSLog(@“%@"
str1);
5.解释类、对象、实例方法和实例成员
类:
一类事物的抽象,有成员和方法。
对象:
类的实例化和具体化
实例方法:
主要和类方法区别,类方法声明时前面用加号,实例方法声明时用减号
实例成员:
主要和类成员区分,类成员加static,实例成员不需要。
6.、类名、方法名、成员名、函数名、宏定义首字母哪些大写,哪些小写
大写:
类名,宏定义
小写:
方法名,成员名,函数名
7.@public,@protected,@private区别
@public:
完全公开,在程序的任何地方都可以调用
@private:
和@public相反,只能在该类内部调用
@protected:
只有自己和自己的子类可以调用
8.如何声明一个带两个参数的实例方法和如何调用(举例说明)
声明:
-(void)methodForParameter1:
(NSString*)p1Parameter2:
(NSString*)p2;
调用:
[selfmethodForParameter1:
"
Parameter2:
9.@property(nonatomic,retain)Example*example;
写出其setter和getter方法
getter
-(Example*)example{return_example;
}
setter
-(void)setExample:
(Example*)aExample
{
if(example!
=aExample)
{
[examplerelease];
example=[aExampleretain];
}
10.static关键字的作用,extern关键字的作用
static:
定义全局变量;
定义类成员;
定义内部函数
extern:
声明外部变量和外部函数,所声明的变量和函数可能不在本文件内定义或实现
11.、解释self
self就是实例本身,在类里用self来调用自身的方法
12.什么时候使用继承?
什么时候使用类别
给一个类增加新的数据成员时用继承,只是想扩展类的方法或覆盖原来的方法时用类别
13.如何声明一个类
@classExample或者
@interfaceExample
@end
14.写出1-2个与动态调用有关的方法
respondsToSelector、performSelector、conformsToProtocol、isKindOfClass、isMemberOfClass
15.写一个协议(举例),协议有什么用
@protocolExampleProtocol<
NSObject>
-(void)exampleProtocol;
@interfaceExampleClass:
NSObject
id<
ExampleProtocol>
delegate;
@property(nonatomic,assign)id<
一个通过协议对外提供接口。
16.存放数字用哪个类,存放CGRect用什么类型
存放数字用NSNumber
存放CGRect用NSValue
17.快速枚举(举例)
NSArray*array=[NSArrayarray];
for(idobjectinarray)
[objecttest];
18.有哪些集合类可存放二进制数据类
NSArray/NSMutableArray,NSDictionary/NSMutableDictionary,NSSet/NSMutableSet/NSCountedSet,NSData存放二进制数据
19.文件处理用哪些类(写1-2个)
NSFileManager\NSUserDefaultsopen,fopen
20.解释retain、copy、assgin、autorelease
retain,copy:
计数器加一,区别是retain是原对象计数器加一,copy是创建一个新对象后,新对象计数器加一
assgin:
简单复制,计数器不变
autorelease:
内存延迟释放,计数器延迟减一
21.写出归档相关类
NSKeyedArchiver、NSKeyedUnarchiver
22.写出xml解析和网络相关类
xml解析:
NSXMLParser,kissXMLGDATA
网络:
NSConnection
23.常用的xml/json解析和http请求第三方包各写出一个
xml:
kissxml
json:
SBJSon
http请求:
ASIHttpRequestSDWebImage,异步图片加载器(界面流畅)
异步mp3异步video
24.代理和通知的区别
代理是垂直的,通知可以平行的
25.写出几个常用的设计模式(两个以上)
MVC设计模式
单例模式
代理模式
通知模式
工厂模式
26.新的关键字:
@class类名;
——解决循环引用问题,提高性能
@class仅仅告诉编译器,在进行编译的时候把后面的名字作为一个类来处理。
(1)@class的作用:
声明一个类,告诉编译器某个名称是一个类
(2)开发中引用一个类的规范
27.http和scoket通信的区别。
http是客户端用http协议进行请求,发送请求时候需要封装http请求头,并绑定请求的数据,服务器一般有web服务器配合(当然也非绝对)。
http请求方式为客户端主动发起请求,服务器才能给响应,一次请求完毕后则断开连接,以节省资源。
服务器不能主动给客户端响应(除非采取http长连接技术)。
iphone主要使用类是NSUrlConnection
scoket是客户端跟服务器直接使用socket“套接字”进行连接,并没有规定连接后断开,所以客户端和服务器可以保持连接通道,双方都可以主动发送数据。
一般在游戏开发或股票开发这种要求即时性很强并且保持发送数据量比较大的场合使用。
主要使用类是CFSocketRef
28.问,mvc设计模式是什么?
你还熟悉什么设计模式?
设计模式:
并不是一种新技术,而是一种编码经验,使用比如java中的接口,iphone中的协议,继承关系等基本手段,用比较成熟的逻辑去处理某一种类型的事情,总结为所谓设计模式。
面向对象编程中,java已经归纳了23中设计模式。
mvc设计模式,可以将整个应用程序在思想上分成三大块,模型,视图,控制器,对应是的数据的存储或处理,前台的显示,业务逻辑的控制。
Iphone本身的设计思想就是遵循mvc设计模式。
代理模式:
代理模式给某一个对象提供一个代理对象,并由代理对象控制对源对象的引用.比如一个工厂生产了产品,并不想直接卖给用户,而是搞了很多代理商,用户可以直接找代理商买东西,代理商从工厂进货.
常见的如QQ的自动回复就属于代理拦截
代理模式在iphone中得到广泛应用.
单例模式,说白了就是一个类不通过alloc方式创建对象,而是用一个静态方法返回这个类的对象。
系统只需要拥有一个全局对象,这样有利于我们协调系统整体的行为,比如想获得[UIApplicationsharedApplication];
任何地方调用都可以得到UIApplication的对象,这个对象是全局唯一的。
观察者模式。
当一个物体发生变化时,会通知所有观察这个物体的观察者让其做出反应。
实现起来无非就是把所有观察者的对象给这个物体,当这个物体的发生改变,就会调用遍历所有观察者的对象调用观察者的方法从而达到通知观察者的目的。
publicclassFactory{
publicstaticSamplecreator(intwhich){
if(which==1)
returnnewSampleA();
elseif(which==2)
returnnewSampleB();
29.代理模式和观察者模式有什么区别?
代理模式为两个对象协同完成一个请求,代理模式常用于代理拦截,比如qq的自动回复。
观察者模式则是一个对象发生变化,可以调用所有的观察者对象的方法完成通知观察者的目的
30.你在开发项目中时,用到了哪些数据存储方式,iphone中常见的方式有哪些,各有什么区别?
数据存储五种形式的应用范围和性能区别(coredata,sqllite,对象序列化,文件直接读写,NSUserDefault(保存数据到temp文件夹中))
性能比较:
文件直接读写>
coredata>
对象序列化>
sqllite
31.线程的常见方法有哪些,你是如何处理多线程的,多线程同步问题你了解么?
线程创建的几种方式,线程的加锁,休眠,唤醒,解锁,退出,多线程要考虑同步问题,解决同步问题的方式就是对某一资源加锁,当一个线程操作本资源时,其他线程不能操作。
系统自带线程池(NSOpertionQueue)的作用凡是需要启动多个线程的地方都可以使用NSOpertionQueue,加入到NSOpertionQueue中的对象都需要继承NSOpertion。
NSOpertionQueue会在系统内部启动一个独立线程去执行这个被加入对象的main方法。
常用的地方是用NSOpertionQueue下载图片,文件。
如果是自己创建一个线程池,无非就是启动多个线程的时候,把这些线程对象放到一个大数组中,如果需要启动线程的时候,先从数组中找空闲线程来使用。
自己管理线程池最大的难题是不好处理当启动多个线程后,用户在多个界面的跳转的时候,对线程方法的回调管理。
而NSOpertionQueue可以很好的处理他。
32.init和initwithobject区别(语法)
init创建的对象不带自动释放
33.你使用过json解析方式么,他们的底层是如何处理的你了解么?
json解析的用法,用框架的用法简单介绍:
底层原理遍历字符串中的字符,最终根据格式规定的特殊字符,比如{}号,[]号,:
号等进行区分,
{}号是一个字典的开始,[]号是一个数组的开始,:
号是字典的键和值的分水岭,最终乃是将json数据转化为字典,字典中值可能是字典,数组,或字符串而已。
34.xml解析的原理是什么,你还用过其他解析方式么?
NSXMLParser。
其他解析方式有自定义二进制解析,就是按字节去解析,电话会谈就是如此,还可以是字符串之间用特殊符号连接的数据,将此数据用特殊符号可以分割成所用数据。
35.协议是什么,有什么作用.
协议是通过网络,计算机使用者进行通讯后,互相进行约定规定的集合。
协议很像java中的接口,某个类实现协议后,就必须实现协议中规定的@require的方法,比如一个类A,一个类B都实现某“协议”后,这个类A的对象和B的对象都可以赋值给这个协议的类型变量,比如id<
协议>
变量名=A类或B类的对象,于是这个变量就
36.类别有什么作用?
类别的使用。
类别有三大作用,
1、可以使本来需要在.h中声明的方法放到.m文件中声明,达到了可以使方法不对外公开。
2、可以方便的扩展类,甚至系统类都可以轻易扩展,维护了代码原本的结构不受影响。
3、类别可以写到不同的.h或.m文件中,可以分散代码到跟类别的扩展功能相关联的地方,方便查看。
37.分线程回调主线程方法是什么,有什么作用?
[selfperformSelectorOnMainThread:
@selector(buttonGo2)withObject:
nilwaitUntilDone:
[selfperformSelector:
@selector(buttonGo2)onThread:
[NSThreadmainThread]withObject:
需要即时刷新ui控件的时候,经常使用。
38.你说你做过iphone阅读器,如果要读取一个文本文件,请问你是如何处理编码问题的?
另外像pdf格式的文件,你如何读取。
iphone手机阅读器中对于PDF格式的阅读,可以直接用UIWebView控件显示,也可以从网上下到很多直接读取pdf格式的代码直接从pdf中得到数据。
Xcode4.1之后系统框架有所拓展。
39.复杂表格动画
-(void)insertRowsAtIndexPaths:
(NSArray*)indexPathswithRowAnimation:
(UITableViewRowAnimation)animation;
-(void)deleteRowsAtIndexPaths:
-(void)reloadRowsAtIndexPaths:
(UITableViewRowAnimation)animation
40.你在开发大型项目的时候,如何进行内存泄露检测的。
可以通过xcode的自带工具run---startwithperformancetool里有
instruments下有个leaks工具,启动此工具后,运行项目,工具里可以显示内存泄露的情况,双击可找到源码位置,可以帮助进行内存泄露的处理。
41.你做iphone开发时候,有哪些传值方式?
View和view之间是如何传值的?
对象的property属性传值。
方法参数传值。
静态方法传值
NSUserDefault传值
NSNotificationCenter
还有用给指向指针的指针赋值的方式传值。
42.让一个物体从界面中的一点运动到另外一点,有哪些方法?
四种方式,1beginAnimation(开始动画)2线程3NSTimer(计时器)4图层动画(路径),5touch事件
43.你了解哪些加密方式?
Base64,MD5等常见加密方式,循环右移位等自定义加密方式
45.NSNotificationCenter的作用?
注册方法,可以在不同的类中调用,常用于系统退出时调用方法保存系统状态,有时可以用于界面之间的切换。
46.问,软件更新如果想增加原表字段的办法?
软件覆盖更新可以保存上个软件的数据库,可以用sql语句增加原表中的字段。
问,通信的同步异步问题,问,你下载电影的处理是同步还是异步。
通信则分为主线程中直接请求,服务器返回迟缓可导致程序卡死,如果启动线程或线程队列,则不影响主线程运行,说白了就是可以进行其他操作,可称为异步。
下载电影用了对象池技术,为异步请求。
问,线程同步是什么?
如何实现?
多线程环境中,一个线程访问资源时,让其他线程不能访问此资源,表示同步。
让线程同步,就是对资源加锁。
NSCondition对象,调用lock方法。
问,如果leaks不能检测出内存泄露,还有什么其他的内存检测工具。
Clang工具。
问,软件如何发布?
花99美元或299美元注册个人或公司帐号后,可以下载开发者证书进行联机调试(只需要把证书拖入xcode),选择device进行编译就可以在手机上运行。
但如果想发布,还需要下载发布证书,添加到xcode编译后app包上传到苹果官方网站审核,大约2个星期内可以发布成功。
如果软件内包含付费内容,则需要在程序中添加IAP,苹果是要求付费分成。
内存管理原则。
1,谁创建谁释放
2,retain和release配对
3,管理好自动释放对象,用的时候加retain,用完后release
4,自动释放池使用原则,借鉴for循环1万次不停创建自动释放的对象的处理方式。
-(void)threadAutoreleasePool{
NSArray*someArray;
NSAutoreleasePool*pool;
pool=[[NSAutoreleasePoolalloc]init];
inti;
for(i=0;
i<
1000000;
i++){
idobject=[someArrayobjectAtIndex:
i];
NSString*desc=[objectdescription];
if(i%1000==0){
[poolrelease];
pool=[[NSAutoreleasePoolalloc]init];
}
问,iphone里是否支持try-catch
支持,可以用于检测异常,跟java的的try-catch的区别是多了个@.
问,你平时是如何学习iphone的,常去哪些外国网站。
(自己查)
问,如果网络出现问题,你连接通信的时候如何处理?
用NSError判断,如果不为空,则说明网络开始连接就出现问题了。
如果是连接中出现了问题,则自动调用NSUrlConnection的错误处理的委托方法(最好记住方法是什么)
。
问,进度条在进度过程中如何过一会改变进度条的填充颜色。
问,如何让一个背景的颜色进行渐变。
问,如何实现翻书特效,如何处理?
问,你项目主要用哪些组件,(直接说出组件类名,显得熟练)
问,iphone和ipad里有什么区别,有哪些组件不一样。
问,你是从iphone几开始做开发的,iphone3和iphone4有什么区别。
你如何做到兼容。
iphone真机的内存是多少,iphone3,iphone4,ipad的分辨率都是多少?
问,你的多方通话项目用的是发送音频流技术么?
不是,我们用的电话回拨技术,服务器有联通的接口,只需要把多个联系人的电话发给服务器即可,为提高通信速度,使用二进制数据通信。
问,xml,json,自定义而进制解析各自的特点和优势劣势。
问,你做过游戏开发么?
熟悉opengl和coco2d技术么?
我做过游戏开发,比如j2me的飞机射击,格斗等游戏。
coco2d是一种大型开源2d游戏开发引擎,支持的功能更为丰富,如果游戏没有用到太复杂的数理功能,可以把其中的部分功能处理提取出来,因为在iphone游戏开发中,只需要知道图形处理(比如图片的剪切和翻转等)就可以实现把j2me的游戏转为iphone游戏,把java代码改变为c++即可(.mm或cpp文件),因为大多使用数组,所以改变起来差距不大,只是变语言而已。
问:
cell单元格中内容太多,以至于拖动时有卡的现象,如何处理?
if(cell==nil){
//重复东西写在内部
如何让tabbarController在屏幕右侧显示?
自定义tabbar
如何处理iphone