在上图中的三种创建,通过XCode我们可以知道,只有方式二创建label时内存会无限增加直至崩溃!为什么会出现以上情况?
首先:UIImage和NSString都是继承NSObject,NSObject是一切类的基类,[[UIImage alloc] init]执行时调用[super init]就是NSObject的init方法,因为NSObject是基类,所以无法再调用[super init],所以不会重新分配内存!而UILabel 是继承自UIView的,[super init]则会无限分配内存!
其次:你有可能会说自动释放的问题!自动释放?好的,自动释放是在什么情况下自动释放的?在NSRunLoop监测到该对象已经用完了就会告诉释放池去释放掉,但是你的循环都走不完,NSRunLoop再怎么牛逼我也没办法监测到你用完了吧!所以这种死循环你的runloop是没办法帮你的.