一、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:方法
+(void) initialize {
}
-(void) init {
}
程序运行过程中,它会在你程序中每个类调用一次initialize。这个调用的时间发生在你的类接收到消息之前,但是在它的超类接收到initialize之后。
实例化对象n次会调用n次init,但是只调用一次initialize。