iOS中的KVC与KVO

一、对于KVC模式(Key Value Coding)(http://my.oschina.net/caijunrong/blog/510701):

1、其实在实际开发中用得比较多得就是:接收到json数据之后,通过解析,解析成NSDictionary,然后再把字典对应的字段建立一个Model,在Model里面自定义一个类方法+(instancetype)modelWithDictionary:(NSDictionary *)keyDictionary方法中调用从而达到我们想要的效果,将字典装成Model。


 setValuesForKeyWithDictionary 方法


2、然后对于一些想要特殊处理的字段可以调用以下方法来进行特殊处理,比如里面有些key是字典类型,则可以通过以下方式搞定:

-(void) setValue:(id)value forKey:(NSString *)key 
{ 
  if([key isEqualToString:@"products"]) 
  { 
    for(NSMutableDictionary *productDict in value) 
    { 
      Prodcut *product = [[Product alloc] initWithDictionary:prodcutDict]; 
      [self.products addObject:product]; 
    } 
  } 
}



3、还有一种情况,就是里面的Key压根就没定义,可以通过重写以下这个方法来重新把key和value对应上号:

- (void)setValue:(id)value forUndefinedKey:(NSString *)key 
{ 
    if([key isEqualToString:@"nameXXX"]) 
        self.name = value; 
    if([key isEqualToString:@"ageXXX"]) 
        self.age = value; 
    else 
        [super setValue:value forKey:key]; 
}



二、对于KVO设计模式(KVO的简单使用):

Key Value Observing, 是一种observer 模式用于监听属性的变化

用addObserver:forKeyPath:options:context:去start observer

用removeObserver:forKeyPath:context去stop observer

回调就是observeValueForKeyPath:ofObject:change:context:。

KVO 的实现也依赖于 Objective-C 强大的 Runtime 。

以下是对于KVO的实验操作 storyboard已截图


//
//  ViewController.m
//  WebTest
//
//  Created by Tree on 16/2/26.
//  Copyright © 2016年 Tree. All rights reserved.
//

#import "ViewController.h"
#import "DataModel.h"

@interface ViewController ()

@property (weak, nonatomic) IBOutlet UILabel *TextLabel;

@property (nonatomic, strong) DataModel *data;

@end

@implementation ViewController

- (void)viewDidLoad {
    [super viewDidLoad];
    
    
    DataModel *data = [[DataModel alloc] init];
    
    [data setValue:@"KVO 初始化" forKey:@"labelText"];
    
    [data addObserver:self forKeyPath:@"labelText" options:NSKeyValueObservingOptionNew|NSKeyValueObservingOptionOld context:NULL];
    
    self.data = data;
    
    self.TextLabel.text = [data valueForKey:@"labelText"];

}

- (IBAction)addBtnDidClick:(id)sender {
    
    [self.data setValue:@"KVO测试成功" forKey:@"labelText"];
    
}

- (void)observeValueForKeyPath:(NSString *)keyPath ofObject:(id)object change:(NSDictionary<NSString *,id> *)change context:(void *)context{

    if ([keyPath isEqualToString:@"labelText"]) {
        
        self.TextLabel.text = [self.data valueForKey:@"labelText"];
        
    }

}

- (void)dealloc{
    
    [self removeObserver:self forKeyPath:@"labelString"];

}

@end


主要内容:本文详细介绍了一种QRBiLSTM(分位数回归双向长短期记忆网络)的时间序列区间预测方法。首先介绍了项目背景以及模型的优势,比如能够有效利用双向的信息,并对未来的趋势上限和下限做出估计。接着从数据生成出发讲述了具体的代码操作过程:数据预处理,搭建模型,进行训练,并最终可视化预测结果与计算分位数回归的边界线。提供的示例代码可以完全运行并且包含了数据生成环节,便于新手快速上手,深入学习。此外还指出了模型未来发展的方向,例如加入额外的输入特性和改善超参数配置等途径提高模型的表现。文强调了时间序列的标准化和平稳检验,在样本划分阶段需要按时间序列顺序进行划分,并在训练阶段采取合适的手段预防过度拟合发生。 适合人群:对于希望学习和应用双向长短时记忆网络解决时序数据预测的初学者和具有一定基础的研究人员。尤其适用于有金融数据分析需求、需要做多一步或多步预测任务的从业者。 使用场景及目标:应用于金融市场波动预报、天气状况变化预测或是物流管理等多个领域内的决策支持。主要目的在于不仅能够提供精确的数值预计还能描绘出相应的区间概率图以增强结论置信程度。 补充说明:本教程通过一个由正弦信号加白噪构造而成的简单实例来指导大家理解和执行QRBiLSTM流程的所有关键步骤,这既方便于初学者跟踪学习,又有利于专业人士作为现有系统的补充参考工具。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值