您好,欢迎访问三七文档
1、简述OC中内存管理机制。与retain配对使用的方法是dealloc还是release,为什么?需要与alloc配对使用的方法是dealloc还是release,为什么?readwrite,readonly,assign,retain,copy,nonatomic、atomic、strong、weak属性的作用?并区别strong(强引用)、weak(弱引用)?什么情况使用copy,assign,和retain?管理机制:使用了一种叫做引用计数的机制来管理内存中的对象。OC中每个对象都对应着他们自己的引用计数,引用计数可以理解为一个整数计数器,当使用alloc方法创建对象的时候,持有计数会自动设置为1。当你向一个对象发送retain消息时,持有计数数值会增加1。相反,当你像一个对象发送release消息时,持有计数数值会减小1。当对象的持有计数变为0的时候,对象会释放自己所占用的内存。retain(引用计数加1)-release(引用计数减1)alloc(申请内存空间)-dealloc(释放内存空间)readwrite:表示既有getter,也有setter(默认)readonly:表示只有getter,没有setternonatomic:不考虑线程安全atomic:线程操作安全(默认)线程安全情况下的setter和getter:-(NSString*)value{@synchronized(self){return[[_valueretain]autorelease];}}-(void)setValue:(NSString*)aValue{@synchronized(self){[aValueretain];[_valuerelease];_value=aValue;}}retain:release旧的对象,将旧对象的值赋予输入对象,再提高输入对象的索引计数为1assign:简单赋值,不更改索引计数(默认)copy:其实是建立了一个相同的对象,地址不同(retain:指针拷贝copy:内容拷贝)strong:(ARC下的)和(MRC)retain一样(默认)weak:(ARC下的)和(MRC)assign一样,weak当指向的内存释放掉后自动nil化,防止野指针unsafe_unretained声明一个弱应用,但是不会自动nil化,也就是说,如果所指向的内存区域被释放了,这个指针就是一个野指针了。autoreleasing用来修饰一个函数的参数,这个参数会在函数返回的时候被自动释放。2、类变量的@protected,@private,@public,@package,声明各有什么含义?@private:作用范围只能在自身类@protected:作用范围在自身类和继承自己的子类(默认)@public:作用范围最大,可以在任何地方被访问。@package:这个类型最常用于框架类的实例变量,同一包内能用,跨包就不能访问3、线程是什么?进程是什么?二者有什么区别和联系?一个程序至少有一个进程,一个进程至少有一个线程:进程:一个程序的一次运行,在执行过程中拥有独立的内存单元,而多个线程共享一块内存线程:线程是指进程内的一个执行单元。联系:线程是进程的基本组成单位区别:(1)调度:线程作为调度和分配的基本单位,进程作为拥有资源的基本单位(2)并发性:不仅进程之间可以并发执行,同一个进程的多个线程之间也可并发执行(3)拥有资源:进程是拥有资源的一个独立单位,线程不拥有系统资源,但可以访问隶属于进程的资源.(4)系统开销:在创建或撤消进程时,由于系统都要为之分配和回收资源,导致系统的开销明显大于创建或撤消线程时的开销。举例说明:操作系统有多个软件在运行(QQ、office、音乐等),这些都是一个个进程,而每个进程里又有好多线程(比如QQ,你可以同时聊天,发送文件等)4、谈谈你对多线程开发的理解?ios中有几种实现多线程的方法?好处:1.使用线程可以把占据时间长的程序中的任务放到后台去处理2.用户界面可以更加吸引人,这样比如用户点击了一个按钮去触发某些事件的处理,可以弹出一个进度条来显示处理的进度3.程序的运行效率可能提高4·在一些等待的任务实现上如用户输入、文件读写和网络收发数据等,线程就比较有用了。缺点:1.如果有大量的线程,会影响性能,因为操作系统需要在它们之间切换。2.更多的线程需要更多的内存空间。3.线程的中止需要考虑其对程序运行的影响。4.通常块模型数据是在多个线程间共享的,需要防止线程死锁情况的发生。实现多线程的方法:1.NSObject类方法2.NSThread3.NSOperation4.GCD5、多线程同步和异步的区别?IOS中如何实现多线程的同步?异步:举个简单的例子就是游戏,游戏会有图像和背景音乐同步:是指一个线程要等待上一个线程执行完之后才开始执行当前的线程,上厕所关键字@synchronized()NSOperationQueue:maxcurrentcountNSConditionLockGCD-、简述什么地方会用到多线程?谈谈多线程安全问题的几种解决方案?何为线程同步,如何实现的?分线程回调主线程方法是什么,有什么作用?7、假设有一个字符串aabcad,请写一段程序,去掉字符串中不相邻的重复字符串,即上述字符串处理之后的输出结果为:aabcd8、获取一台设备唯一标识的方法有哪些?、ios类是否可以多继承?如果没有,那可以用其他方法实现吗?简述实现过程。OC没有多继承,协议能够实现多继承。protocol10、堆和栈的区别?问题扩展:要知道OC中NSString的内存存储方式11、ios本地数据存储都有哪几种方式?1.NSKeyedArchiver2.NSUserDefaults3.Write写入方式4.SQLite3(问题扩展:什么情况下使用什么样的数据存储)12、写出方法获取ios内存使用情况。(问题扩展:如何利用Xcode观察内存使用情况)13、深拷贝和浅拷贝的理解?://blog.sina.com.cn/s/blog_7b9d64af01019k6n.html14、怎样实现一个singleton的类。问题扩展:单例的好处是什么?15、什么是安全释放?置nil16、RunLoop是什么?、什么是序列化和反序列化,可以用来做什么?如何在OC中实现复杂对象的存储?、写一个标准宏MIN,这个宏输入两个参数并返回较小的一个?#defineMIN(X,Y)((X)(Y)?(Y):(X))为什么加小括号。直接替换如果不加小括号min(4+5,1+10)4+51+10?4+10:1+5扩展:在定义宏的时候需要注意哪些问题?19、垃圾回收机制是什么iphoneos有没有垃圾回收机制?简单阐述一下OC内存管理。本身有,在ios平台上用引用计数代替20、简述应用程序按Home键进入后台时的生命周期,以及从后台回到前台时的生命周期?自己可以写个demo来测试一下21、ViewController的alloc,loadView,viewDidLoad,viewWillAppear,viewDidUnload,dealloc、init分别是在什么时候调用的?在自定义ViewController的时候这几个函数里面应该做什么工作?自己写代码测试加深理解22、描述应用程序的启动顺序。1.程序入口main函数创建UIApplication实例和UIApplication代理实例。2.在UIApplication代理实例中重写启动方法,设置第一ViewController。3.在第一ViewController中添加控件,实现应用程序界面。23、为什么很多内置类如UITableViewControl的delegate属性都是assign而不是retain?请举例说明。防止循环引用Student*str=[];Teacher*teacher=[[Teacheralloc]init];Student*student=[[Studentalloc]init];teacher.delegate=student;student.delegate=teacher;在teacher中dealloc会release当前的Delegate,就会触发student对象release,继而也会导致student执行dealloc,在student中也会release自己的delegate,产生循环了。UITableVIewController:Self.tableview.delegate=self.VC;ViewController:UItableviewdelegateSelf.tableview.delegate=self.tableviewcontroller;24、使用UITableView时候必须要实现的几种方法?-(NSInteger)tableView:(UITableView*)tableViewnumberOfRowsInSection:(NSInteger)section;这个方法返回每个分段的行数,不同分段返回不同的行数可以用switch来做,如果是单个列表就直接返回单个你想要的函数即可。-(UITableViewCell*)tableView:(UITableView*)tableViewcellForRowAtIndexPath:(NSIndexPath)indexPath;这个方法是返回我们调用的每一个单元格。通过我们索引的路径的section和row来确定25、写一个便利构造器。//id代表任意类型指针,这里代表Student*,类方法+(id)studentWithName:(NSString*)newNameandAge:(int)newAge{Student*stu=[[Studentalloc]initName:newNameandAge:newAge];return[stuautorelease];//自动释放}26、UIImage初始化一张图片有几种方法?简述各自的优缺点。面试题比较齐全的网址:、回答person的retainCount值,并解释为什么Person*per=[[Personalloc]init];self.person=per;228、这段代码有什么问题吗:@implementationPerson-(void)setAge:(int)newAge{self.age=newAge;
本文标题:就业面试题
链接地址:https://www.777doc.com/doc-2476196 .html