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

2015-05-06  本文已影响42人  candy_r

一、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

上一篇下一篇

猜你喜欢

热点阅读