init initwithframe

代码 你不了解它,它就是一个善变的东西,有时候写出来就是和自己想象的是不同的,那是因为自己对它不是太了解。。。。。

自己定义一个继承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是个什么东东呢?它是给对象分配内存的时候,把关联的对象分配到一个相邻的内存区域内,以便于调用时消耗很少的代价,提升了程序处理速度.

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值