iOS会遇到的面试题(一)

来源:互联网 发布:世界粮农组织数据库 编辑:程序博客网 时间:2024/06/05 10:59

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" ];

}




0 0
原创粉丝点击