iOS——懒加载和block传值

本文详细介绍了iOS开发中的懒加载概念及其优势,包括如何通过getter方法实现懒加载,以及在实际应用中的注意事项。同时,文章探讨了使用Block进行参数传递的方法,展示了在两个页面间如何通过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传值的过程。

结果:

在这里插入图片描述

在这里插入图片描述

内容概要:本文档是AUTOSAR CP Release 4.4.0版本中关于EEPROM驱动模块的规范说明,详细定义了EEPROM驱动的功能、API接口、错误处理机制、配置参数以及与SPI外设的交互方式。该驱动支持对内部外部EEPROM设备进行异步读、写、擦除比较操作,并提供状态查询、作业取消版本信息获取等功能。文档明确了驱动的行为准则,包括单任务处理、数据缓冲区使用、地址对齐处理、超时监控及硬件故障检测等,同时规定了不同类型的错误分类(开发错误、运行时错误、扩展生产错误)及其响应机制。此外,还涵盖了配置结构、回调通知机制及针对SPI通信的具体配置示例。 适合人群:从事汽车电子软件开发的工程师,特别是参与AUTOSAR架构下ECU开发的技术人员,具备嵌入式系统C语言编程基础,熟悉MCAL、BSW模块及相关通信协议(如SPI)的开发者。 使用场景及目标:①用于开发符合AUTOSAR标准的EEPROM驱动程序;②指导如何在实际项目中配置集成EEPROM驱动;③为实现非易失性存储管理(如NvM模块配合使用)提供底层支持;④帮助理解AUTOSAR BSW模块的设计原则与接口规范。 阅读建议:建议结合AUTOSAR其他相关规范(如MemIf、SPI Handler/Driver、BSW General)一起阅读,重点关注API定义、错误处理流程配置参数设置。在实际开发中应严格按照文档中的约束条件进行编码与配置,并通过示例理解实现SPI外设的集成逻辑。同时注意区分内部与外部EEPROM驱动的差异,确保满足功能安全与实时性要求。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值