美文网首页
mark一些平常不清楚的点(略小白)

mark一些平常不清楚的点(略小白)

作者: candy_r | 来源:发表于2015-05-06 17:10 被阅读42次

    一、instancetype和id(http://blog.csdn.net/kuizhang1/article/details/18048829

    id:未知类型对象关键字

    instancetype:某个方法返回的未知类型关键字

    在非关联返回类型方法中:

    + (id)constructAnArray;

    [NSArrayconstructAnArray];返回id类型

    + (instancetype)constructAnArray;

    [NSArrayconstructAnArray];返回NSArray*类型

    所以:instancetype的作用,就是使那些非关联返回类型的方法返回所在类的类型

    1、相同点

    都可以作为方法的返回类型

    2、不同点

    ①instancetype可以返回和方法所在类相同类型的对象,id只能返回未知类型的对象;

    ②instancetype只能作为返回值,不能像id那样作为参数

    二、initWithFrame和initWithCoder

    纯代码时用initWithFrame初始化对象

    IB时用initWithCoder,initWithFrame不会被调用,因为nib已经初始化了

    三、setNeedsDisplay和setNeedsLayout以及layoutSubviews和drawRect(http://jianyu996.blog.163.com/blog/static/112114555201305113018814/)

    layoutSubviews:用来调整子视图的尺寸和位置

    setNeedsLayout会默认调用layoutSubViews,就可以处理子视图中的一些数据

    drawRect:创建自己的试图,该方法不被建议手动显示调用,须通过调用setNeedsDisplay 或 者 setNeedsDisplayInRect,让系统自动调该方法

    如果在UIView初始化时没有设置rect大小,将直接导致drawRect不被自动调用

    该方法在调用sizeToFit后被调用,所以可以先调用sizeToFit计算出size。然后系统自动调用drawRect:方法

    四、initialize 和 init

    +(void) initialize {

    }

    -(void) init {

    }

    程序运行过程中,它会在你程序中每个类调用一次initialize。这个调用的时间发生在你的类接收到消息之前,但是在它的超类接收到initialize之后。

    实例化对象n次会调用n次init,但是只调用一次initialize

    相关文章

      网友评论

          本文标题:mark一些平常不清楚的点(略小白)

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