iOS 程序员面试要注意的问题

移动开发 iOS
当您向一个对象发送一个autorelease消息时,Cocoa就会将该对象的一个引用放入到最新的自动释放池。它仍然是个正当的对象,因此自动释放 池定义的作用域内的其它对象可以向它发送消息。当程序执行到作用域结束的位置时,自动释放池就会被释放,池中的所有对象也就被释放。

[[121698]]

1、自动释放池是什么,如何工作?

当您向一个对象发送一个autorelease消息时,Cocoa就会将该对象的一个引用放入到***的自动释放池。它仍然是个正当的对象,因此自动释放 池定义的作用域内的其它对象可以向它发送消息。当程序执行到作用域结束的位置时,自动释放池就会被释放,池中的所有对象也就被释放。 

 2、说一说static 关键字

(1)函数体内 static 变量的作用范围为该函数体,不同于 auto 变量,该变量的内存只被分配一次, 

因此其值在下次调用时仍维持上次的值; 

(2)在模块内的 static 全局变量可以被模块内所用函数访问,但不能被模块外其它函数访问; 

(3)在模块内的 static 函数只可被这一模块内的其它函数调用,这个函数的使用范围被限制在声明 

它的模块内; 

(4)在类中的 static 成员变量属于整个类所拥有,对类的所有对象只有一份拷贝; 

(5)在类中的 static 成员函数属于整个类所拥有,这个函数不接收 this 指针,因而只能访问类的static 成员变量。  

 3、什么事单件实例

Foundation 和 Application Kit 框架中的一些类只允许创建单件对象,即这些类在当前进程中的唯一实例。举例来说,NSFileManager 和NSWorkspace 类在使用时都是基于进程进行单件对象的实例化。当向这些类请求实例的时候,它们会向您传递单一实例的一个引用,如果该实例还不存在,则首先进行实例的分配 和初始化。单件对象充当控制中心的角色,负责指引或协调类的各种服务。如果类在概念上只有一个实例(比如 

NSWorkspace),就应该产生一个单件实例,而不是多个实例;如果将来某一天可能有多个实例,您可 

以使用单件实例机制,而不是工厂方法或函数。

 4、说说Objective-C,有哪些优点哪些不足

objc优点: 

1) Cateogies 

2) Posing 

3) 动态识别 

4) 指标计算 

5)弹性讯息传递 

6) 不是一个过度复杂的 C 衍生语言 

7) Objective-C 与 C++ 可混合编程 

不足: 

1) 不支援命名空间 

2)  不支持运算符重载 

3)不支持多重继承 

4)使用动态运行时类型,所有的方法都是函数调用,所以很多编译时优化方法都用不到。(如内联函数等),性能低劣。 

5、#import和#include的区别,@class代表什么?

@class一般用于头文件中需要声明该类的某个实例变量的时候用到,在m文件中还是需要使用#import

而#import比起#include的好处就是不会引起重复包含

 6、线程和进程的区别?

进程和线程都是由操作系统所体会的程序运行的基本单元,系统利用该基本单元实现系统对应用的并发性。

进程和线程的主要差别在于它们是不同的操作系统资源管理方式。进程有独立的地址空间,一个进程崩溃后,在保护模式下不会对其它进程产生影响,而线程只是一个 进程中的不同执行路径。线程有自己的堆栈和局部变量,但线程之间没有单独的地址空间,一个线程死掉就等于整个进程死掉,所以多进程的程序要比多线程的程序 健壮,但在进程切换时,耗费资源较大,效率要差一些。但对于一些要求同时进行并且又要共享某些变量的并发操作,只能用线程,不能用进程。

7、Object-C的内存管理?

1.当你使用new,alloc和copy方法创建一个对象时,该对象的保留计数器值为1.当你不再使用该对象时,你要负责向该对象发送一条release或autorelease消息.这样,该对象将在使用寿命结束时被销毁.

2.当你通过任何其他方法获得一个对象时,则假设该对象的保留计数器值为1,而且已经被设置为自动释放,你不需要执行任何操作来确保该对象被清理.如果你打算在一段时间内拥有该对象,则需要保留它并确保在操作完成时释放它.

3.如果你保留了某个对象,你需要(最终)释放或自动释放该对象.必须保持retain方法和release方法的使用次数相等.

8、属性readwrite,readonly,assign,retain,copy,nonatomic 各是什么作用,在那种情况下用?

readwrite 是可读可写特性;需要生成getter方法和setter方法时

readonly 是只读特性  只会生成getter方法 不会生成setter方法 ;不希望属性在类外改变

assign 是赋值特性,setter方法将传入参数赋值给实例变量;仅设置变量时;

retain 表示持有特性,setter方法将传入参数先保留,再赋值,传入参数的retaincount会+1;

copy 表示赋值特性,setter方法将传入对象复制一份;需要完全一份新的变量时。

nonatomic 非原子操作,决定编译器生成的setter getter是否是原子操作,atomic表示多线程安全,一般使用nonatomic

责任编辑:闫佳明 来源: itjhwd
相关推荐

2018-05-23 15:13:50

程序员面试格式

2009-06-22 13:46:00

java程序员考试

2013-05-03 11:31:40

程序员

2016-04-19 10:23:48

2015-07-28 10:30:57

程序员接私单

2013-01-10 09:22:58

程序员面试程序员面试经历

2015-12-24 10:28:37

程序员面试技巧

2015-08-04 10:07:08

程序员面试问题

2018-04-02 14:42:20

面试程序员简历

2016-04-28 11:17:33

互动出版网

2015-08-19 09:10:37

程序员面试

2015-08-19 08:51:38

程序员面试糟糕

2018-03-22 15:36:26

程序员RubyiOS

2013-02-19 10:12:59

2021-12-30 06:59:28

方法重写面试

2013-05-14 09:44:41

程序员面试

2015-03-30 15:51:29

程序员程序员面试

2018-08-02 17:00:15

Vue.js学习iOS开发

2013-08-20 09:33:59

程序员

2015-10-08 15:24:44

程序员面试贴士
点赞
收藏

51CTO技术栈公众号