您的位置:首页 > 职场人生

iOS工程师常见面试题

2015-09-13 15:44 357 查看
1.属性的属性有哪些

a.读写特性:readOnly,readWrite,setter(指定setter方法的名),getter(指定getter方法的名)

注意:setter和getter属性一般用在返回值为BOOL类型的方法中,为该方法重新指定方法名

b.原子性:atomic,nonatomic,

c.语义特性:assign,retain,copy,strong,weak,unsafe_unretained,NotNull,null

注意:

copy:要遵循<NSCopying>协议的类,才能使用copy。

weak:弱引用会防止野指针异常。

unsafe_unretained:容易出现野指针异常的问题。

2.retain、copy、assign三种内部的实现

assign的setter和getter方法:

-(void)setter:(NSString *)string

{

_string = string;

}

-(NSString *)string

{

return _string;

}

retain的setter和getter方法:

-(void)setter:(NSString *)string

{

if(_string != string){

[_string release];

_string = [string retain];

}

}

-(NSString *)string

{

return [[_string retain]autorelease];

}

copy的setter和getter方法:

-(void)setter:(NSString *)string

{

if(_string != string){

[_string release];

_string = [string copy];//深复制,复制一份副本,retainCount的值不变

}

}

-(NSString *)string

{

return [[_string retain]autorelease];

}

内存管理的机制

讲解:iOS仅支持两种内存管理方式,MRC和ARC。我们内存管理主要讲一下MRC。对于MRC,内存管理的机制是:引用计数。一个对象可以被其他对象持有(拥有),被一个对象持有,我们认为这个对象的引用计数为1,被两个对象拥有,我们认为这个对象的引用计数为2。以此类推。当某个对象不再持有这个对象,我们认为这个对象的引用计数减少1,当对象的引用计数减少到0的时候,说明没有任何对象持有这个对象了,操作系统就会回收这个对象所占有的内存。

整个内存管理其实都在管理这个引用计数,持有一个对象的时候,需要让被持有的对象引用计数加1,当不再持有这个对象的时候,要让被持有对象的引用计数减1。只有对象引用计数为0,对象占用的内存空间才会被系统回收。如果在程序运行过程中,由于内存管理不到位,导致对象不再使用时引用计数还不为0,会引起内存泄露,累积到一定程度程序会crash。如果引用计数为0之后,还在使用这个被系统回收的内存空间,会产生野指针异常,程序通常立即crash。一个好的程序员,既不能让程序产生内存泄露,也不能让程序产生野指针异常。

面试题

1, 分别描述内存管理要点、autorelease、release、NSAutoreleasePool?并

说明autorelease是什么时候被release的?简述什么时候由你负责释放对象,什么时候不由你释放?[NSAutoreleasePool release] 和[NSAutoreleasePool drain]有什么区别

2,、 说说下面关键词在内存管理的作用:alloc、init、copy、retain、release、autorelease、dealloc、retaincount?

3,简述OC中内存管理机制。与retain配对使用的方法是dealloc还是release,为什么?需要与alloc配对使用的方法是dealloc还是release,为什么?readwrite,readonly,assign,retain,copy,nonatomic 、atomic、strong、weak属性的作用?并区别strong(强引用)、 weak(弱引用)?什么情况使用copy,assign,和retain? 引用计数机制进行内存管理。

dealloc release 因为retain就要销毁 创建就要释放

readwtite : 可读写(设置器和访问器) readonly : 只读(访问器) assign : 只做赋值

retain,copy : 赋值并引用计数加1 copy : 拷贝并引用计数加1 nonatomic : 非原子性 anotamic : 原子性(保证多线程安全)

strong : 打开ARC时才会使用,相当于retain weak : 打开ARC时才会使用,相当于assign, 可以把对应的指针变量置为nil copy : 适用于接受了nscopy 协议的对象类型 assign : 适用于一般类型 retain : 适用于一般对象类型
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: