代码 你不了解它,它就是一个善变的东西,有时候写出来就是和自己想象的是不同的,那是因为自己对它不是太了解。。。。。
自己定义一个继承UIView的MyView,然后重写的init 和initwithframe方法。在这两个方法中绘制自己想要的布局和格式
下面就是创建MyView了, 使用了三个方法创建
1.使用 [MyView new];
我在代码中 我创建了一个MyView 但是我在我输出中确是两个?????尼玛
2使用[[MyView alloc]init];
使用方法2 我也创建了一个MyView,但是 但是输出的时候 尼玛 两个??说我创建了两个!!!!????
3使用[[MyView alloc]initWithFrame:CGRect];
使用这个方法,和我想象的是一样的,我创建了一个,要的也是一个,输出的也是一个。这个是我想要的结果。。
为什么前两种方法我明明只是创建了一次,运行后确创建了两个呢????
用纯代码创建的view在init的时候都会调用initWithFrame。即使用init方法初始化也会调用initWithFrame,只是frame参数是CGRectZero。用xib和storyboard创建的view初始化的时候调用inirWithCoder。原理和纯代码是一样的 的 的 的。
new做的事情和alloc init是一样的,当然你要构造方法是init的时候完全可以用new来代替 ,alloc 不仅仅可以使用init构造方法,更可以自定义构造方法 initWithFrame等等
alloc开辟空间后能够自动清空新开辟内存空间中的老数据,不会出现莫名奇妙的错误,见《Objective-C基础教程》
区别只在于alloc分配内存的时候使用了zone,这个zone是个什么东东呢?它是给对象分配内存的时候,把关联的对象分配到一个相邻的内存区域内,以便于调用时消耗很少的代价,提升了程序处理速度.