iOS——懒加载和block传值

懒加载

首先在学习懒加载前我们必须知道什么是懒加载。懒加载就是将我们平时将存放网络数据的数组,控制器的view,控件的自定义,复杂的运算逻辑等等情况下使用 的一种方法,通俗的说就是当我们需要用到的时候再加载。

懒加载的优点

  1. 也被成为延迟加载,可以做到用到时再加载
  2. 加载过了就不会再次加载,节约了系统资源
  3. 对于实际开发中可能会遇到的一些顺序问题,懒加载也能很好的解决
  4. 运行内存小,节约内存

懒加载的思路

  1. 在类扩展中创建一个属性
  2. 重写这个属性对应的getter,将要实现的逻辑放到这个getter中
  3. 考虑到懒加载只加载一次,那么在实现逻辑之前应该判断一下这个属性是否为空,为空才执行逻辑,否则直接返回这个属性

懒加载使用方法

先声明UILabel:

@property(nonatomic , strong)UILabel* label;

懒加载实现:


-(UILabel *)label{
	if (_label == nil) { //判断是否存在实例,如果不存在则创建实例
	_label = [[UILabel alloc]init];//创建实例
}
return _label;

} 

注意在使用_label时不能用self.label,因为会循环调用getter方法,造成死循环。

block传值

在我们使用block传值时,必须要注意的两点:

  1. 首先在第二个页面必须声明一个block
  2. 在第一个页面跳转到第二个页面时为block中的属性赋值,完成block传值。

使用

首先我们在第二个页面,SecondViewController.h中定义一个block:


//定义Block
typedef void (^PushBlock)(NSString *);
NS_ASSUME_NONNULL_BEGIN

@interface SecondViewController : UIViewController
@property(nonatomic , strong)PushBlock pushValueString;
@property(nonatomic , strong)UITextField* textField;
@property(nonatomic , strong)NSString* textString;
@property(nonatomic , strong)UIButton* button;
@end

接着在SecondViewController.m中设置文本框和按钮,同理在ViewController.m中也设置文本框与按钮:

 [super viewDidLoad];
    self.view.backgroundColor = [UIColor yellowColor];
    _textField = [[UITextField alloc] initWithFrame:CGRectMake(0, 250, self.view.bounds.size.width, 50)];
    _textField.borderStyle = UITextBorderStyleRoundedRect;

    [self.view addSubview:_textField];
    
    _button = [UIButton buttonWithType:UIButtonTypeRoundedRect];
    _button.frame = CGRectMake(20, 350, self.view.bounds.size.width-40, 50);
    _button.backgroundColor = [UIColor purpleColor];
    _button.titleLabel.font = [UIFont systemFontOfSize:25.0];
    _button.tintColor = [UIColor whiteColor];
    [_button setTitle:@"Back" forState:UIControlStateNormal];
    [_button addTarget:self action:@selector(pressback:) forControlEvents:UIControlEventTouchUpInside];
    [self.view addSubview:_button];
}

我们同是要完成按钮对应的点击事件:

- (void)pressback: (UIButton*)sender {
    //    核心代码
    _pushValueString (_textField.text);
    [self dismissViewControllerAnimated:YES completion:nil];
}

在ViewController.m中的按钮事件:

- (void)pressnext:(UIButton*)sender {
    SecondViewController* second = [[SecondViewController alloc] init];
    second.pushValueString = ^(NSString* string) {
        _textFieldFirst.text = string;
    };
    second.modalPresentationStyle = UIModalPresentationFullScreen;
    [self presentViewController:second animated:YES completion:nil];
}
@end

这样就完成了首先在第二个页面必须声明一个block,在第一个页面跳转到第二个页面时为block中的属性赋值,完成block传值的过程。

结果:

在这里插入图片描述

在这里插入图片描述

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
经导师精心指导并认可、获 98 分的毕业设计项目!【项目资源】:微信小程序。【项目说明】:聚焦计算机相关专业毕设及实战操练,可作课程设计与期末大作业,含全部源码,能直用于毕设,经严格调试,运行有保障!【项目服务】:有任何使用上的问题,欢迎随时与博主沟通,博主会及时解答。 经导师精心指导并认可、获 98 分的毕业设计项目!【项目资源】:微信小程序。【项目说明】:聚焦计算机相关专业毕设及实战操练,可作课程设计与期末大作业,含全部源码,能直用于毕设,经严格调试,运行有保障!【项目服务】:有任何使用上的问题,欢迎随时与博主沟通,博主会及时解答。 经导师精心指导并认可、获 98 分的毕业设计项目!【项目资源】:微信小程序。【项目说明】:聚焦计算机相关专业毕设及实战操练,可作课程设计与期末大作业,含全部源码,能直用于毕设,经严格调试,运行有保障!【项目服务】:有任何使用上的问题,欢迎随时与博主沟通,博主会及时解答。 经导师精心指导并认可、获 98 分的毕业设计项目!【项目资源】:微信小程序。【项目说明】:聚焦计算机相关专业毕设及实战操练,可作课程设计与期末大作业,含全部源码,能直用于毕设,经严格调试,运行有保障!【项目服务】:有任何使用上的问题,欢迎随时与博主沟通,博主会及时解答。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值