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

iOS会遇到的面试题(一)

2016-03-25 12:32 417 查看
1,请你讲讲mrc的内存管理

mac的内存管理是采用了引用计数,

当alloc/new/copy计数器初始值为1

retain时计数器加1

release时计数器减1

我们需要在dealloc方法中释放变量,当对象被销毁时,系统就会自动调用方法,当计数器为0时,方法也会被自动调用

2,请你讲讲@proprety关键字的作用

我认为是提供了一个外界访问成员变量的接口,就是给成员变量提供了set和get的方法

3,请你讲讲@proprety中assign,retain,strong, weak有什么区别

assign和retain是MRC中的,assign修饰的变量既不能retain也不能被release,所以一般在基本数据类型用assign,(因为基本数据类型都是存放在全局区或者栈区,不需要手动释放),而retain用来修饰对象类型

strong与weak都是现在ARC中的,我认为强引用strong与retain作用相同,计数器都会加1

而弱引用weak与assign作用相同,可以用来修饰基本数据类型,当然在retain cycle中也确实需要weak

4,请你讲讲如今iOS的页面约束问题(界面适配)

1,用原生的NSLayoutConstraint(非常的麻烦,不推荐)

2,VLF简化

3,第三方框架masonry (特别简洁)

UIEdgeInsets padding = UIEdgeInsetsMake(10, 10, 10, 10);

[view1 mas_makeConstraints:^(MASConstraintMaker *make) {

make.top.equalTo(superview.mas_top).with.offset(padding.top); //with is an optional semantic filler

make.left.equalTo(superview.mas_left).with.offset(padding.left);

make.bottom.equalTo(superview.mas_bottom).with.offset(-padding.bottom);

make.right.equalTo(superview.mas_right).with.offset(-padding.right);

}];

甚至我们这样写得更加简洁

[view1 mas_makeConstraints:^(MASConstraintMaker *make) {

make.edges.equalTo(superview).with.insets(padding);

}];

5,tableviewCell的重用机制

一个单元格对应一个reuseIdentifer可重用标识符,当一个单元格滚出屏幕时可以被用来重用,运用重用机制,即时上百个单元格也只需要屏幕显示的最大单元格数,当新的cell进入屏幕时,会随机调用已经滚出屏幕的cell所占用的内存

UITableviewcel *cell =[tableview dequeuereusablecellwithIdentifier:@"cell" ];

if(cell=nil){

cell=[ [UItableViewCell alloc ]initWithStyle: style reuseIdentifier:@"cell" ];

}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: