美文网首页
自己总结的面试题

自己总结的面试题

作者: 大写的程序员 | 来源:发表于2016-05-09 16:05 被阅读0次

    1、生成Image时

    + (UIImage *)imageWithContentsOfFile:(NSString *)path

    + (UIImage *)imageNamed:(NSString *)name

    二者在什么情况下使用,为什么?

    答:使用大的图片,如果不是常用,那么用 imagewithcontentsoffile 方法,比较小的(比如图标),需要经常使用的,那么用后者,imageNamed 加载。内存常驻,效率高。不过,如果图片比较多,一起用 imagenamed 加载,很容易内存泄露,程序崩溃,还需要及时关闭动画,清除图片数组等措施。


    2、优化UITableViewCell

    正确使用reuseIdentifier来重用Cells

    尽量使所有的view opaque,包括Cell自身,同时尽量少用或不用透明图层

    如果Cell内现实的内容来自web,使用异步加载,缓存请求结果。

    减少subviews的数量,把cell画出来,

    尽量少用addView给Cell动态添加View,可以初始化时就添加,然后通过hide来控制是否显示

    在heightForRowAtIndexPath:中尽量不使用cellForRowAtIndexPath:,如果你需要用到它,只用一次然后缓存结果


    3、NSString属性copy和strong有什么区别吗?

    NSMutableString*mStr = [NSMutableString stringWithFormat:@"abc"];

    self.rStr= mStr;

    self.cStr= mStr;

    copy是深复制,cStr内存地址与指针均与赋值字串的不一样,不会随着mStr赋值字串的值变化;

    strong,retain是浅复制,指针虽然不同,但都指向同一个内存地址,会随着mStr的变化而变化;

    上面的情况是针对于当把NSMutableString赋值给NSString的时候,才会有不同,如果是赋值是NSString对象,那么使用copy还是strong,结果都是一样的,因为NSString对象根本就不能改变自身的值,他是不可变的。

    拓展引申:在有指针的情况下,浅拷贝只是增加了一个指针指向已经存在的内存,而深拷贝就是增加一个指针并且申请一个新的内存,使这个增加的指针指向这个新的内存,采用深拷贝的情况下,释放内存的时候就不会出现在浅拷贝时重复释放同一内存的错误!


    4、nil、Nil、NULL和NSNull的理解

    nil是一个对象指针为空,Nil是一个类指针为空,NULL是基本数据类型为空。

    nil:我们给对象赋值时一般会使用object = nil,表示我想把这个对象内存释放掉,此时是个空指针

    Nil:nil和Nil在使用上是没有严格限定的,也就是说凡是使用nil的地方都可以用Nil来代替,反之亦然。只不过从编程人员的规约中我们约定俗成地将nil表示一个空对象,Nil表示一个空类

    NSNull:[NSNull null]值为空的对象

    NULL:C语言的语法,它表示一个空指针,int *ponit = NULL;

    相关文章

      网友评论

          本文标题:自己总结的面试题

          本文链接:https://www.haomeiwen.com/subject/olserttx.html