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