if ( _noLabel == nil ) {

UILabel *label = [[ UILabel alloc ] initWithFrame : CGRectMake ( 0 , 20 , self . view . bounds . size . width , 40 )];

_noLabel = label;

_noLabel . textAlignment = NSTextAlignmentCenter ;

[ self . view addSubview : _noLabel ];

return _noLabel ;

页面中截面都不应该放到 V i ewDidLoad 而使放在懒加载里, 用的时候才初始化调用,

使用懒加载可以避免 控件执行的先后顺序问题。 因为用的时候就自己去找,自己去调用。所以不会出现先后顺序问题

//在getter方法中,不要再使用self.否则会重复调用getter方法,造成死循环- (UILabel *)noLabel{   if (_noLabel ==nil) {       UILabel *label = [[UILabelalloc] initWithFrame:CGRectMake(0,20, self.view.boun 原因: 内存溢出。 1、当A对象里面强引用了B对象,B对象又强引用了A对象,这样两者的retainCount值一直都无法为0,于是内存始终无法释放,导致内存泄露。所谓的内存泄露就是本应该释放的对象,在其生命周期结束之后依旧存在。 2、这是2个对象之间的,相应的,这种循环还能存在于3,4……个对象之间,只要相互形成环,就会导致 死循环 的问题。 3、当然也存在自... 函数调用栈, 函数调用的时候,sp 栈顶指针寄存器减对应的内存空间,栈内存开启对应的内存空间,函数调用完毕之后,sp 再加回去,栈内存释放对应的内存空间。 所以,如果是这样方式调用的话, 第一函数不会返回,栈内存不会释放。 第二是,一...
懒加载 ,又称延时加载,既当对象需要用到的时候去加载, iOS 中可以利用重写对象的get方法,当开发者调用到get方法的时候,再去加载对象。 1、不需要一开始就实例化,简化代码 2、解耦,都在各自的get方法中实现 3、减少内存,用到才会加载 @interface LazyViewController () @property (nonatomic, strong) UIV
一. RunLoop简介 RunLoop字面意思是跑圈,在我们的项目中其实就是运行循环,而且是充满灵性的 死循环 ,为什么说他充满灵性呢?因为他可以在我们需要的时候自己跑起来运行,在我们没有操作的时候就停下来休息。充分节省CPU资源,提高程序性能。 二. RunLoop基本作用: 保持程序持续运行,程序一启动就会开一个主线程,主线程一开起来就会跑一个主线程对应的RunLoop,RunLoop
懒加载 又称为延迟加载,它是指系统不会在初始化时就加载某个对象,而是在第一次调用(使用get方法)时才加载这个对象到内存中。简单来说,就是某个对象被使用的时候再加载。 懒加载 的实现方式:重写对象的get方法,并将该对象在初始化时需要实现的代码在get方法中实现。 @interface ViewController () @property (nonatomic, stro...
一般我们手码封装组件时 会在initWithFrame中添加自定义操作 但是重写UITableViewCell时 却不执行这个方法 需要重写initWithStyle方法 UICollectionViewCell 这样是可以的 @implementation iComeImageCollectionViewCell #pragma mark - System - (insta...
对于这个问题,我可以回答。 iOS 懒加载 可以通过重写getter方法来实现,当第一次访问属性时,才会执行getter方法中的代码,从而实现 懒加载 。例如: - (NSString *)name { if (!_name) { _name = [[NSString alloc] init]; return _name; 在这个例子中,当第一次访问name属性时,会执行if语句中的代码,创建一个NSString对象并赋值给_name,然后返回_name。之后再次访问name属性时,就不会再执行if语句中的代码了,直接返回_name。