iOS开发UI系列之KVC/KVO

一. KVC : key value coding,通常用来给某一个对象的属性赋值

1. KVC赋值

  
  
  1. // 1.1 创建人
  2. LDPerson *p = [[LDPerson alloc] init];
  3. self.person = p;
  4. // 1.2 创建狗
  5. LDDog *dog = [[LDDog alloc] init];
  6. // 1.3 将狗赋值给人
  7. [p setValue:dog forKeyPath:@"dog"];
  8. // 1.4 通过kvc给dog的weight属性赋值 \
  9. 赋值时会自动找到人拥有的dogweight属性
  10. [p setValue:@20.0 forKeyPath:@"dog.weight"];
  11. NSLog(@"books = %@", [p valueForKeyPath:@"dog.weight"]);
  12. [dog print];

2. KVC字典赋值

  
  
  1. // 2.1 创建一个字典,person的属性为键,对应赋值
  2. NSDictionary *dict = @{@"name": @"jack", @"age": @"10", @"height": @"1.65"};
  3. // 2.2 通过字典中的键找到person对象属性进行赋值
  4. [p setValuesForKeysWithDictionary:dict];
  5. NSLog(@"name = %@, age = %@, height = %@", [p valueForKeyPath:@"name"], [p valueForKeyPath:@"age"], [p valueForKeyPath:@"height"]);

3. 自定义字典

  
  
  1. // 3.1 定义字典
  2. NSDictionary *dict1 = @{@"name": @"jim",
  3. @"age": @"20",
  4. @"height": @"1.75",
  5. @"books": @[@{@"price": @"100"}, @{@"price": @"98"}, @{@"price": @"200"}, @{@"price": @"198"}], @"dog": @{@"weight": @"45.89"}};
  6. // 3.2 kvc赋值
  7. [p setValuesForKeysWithDictionary:dict1];
  8. // 3.3 输出boos中存放的是字典
  9. NSLog(@"books = %@", [p valueForKeyPath:@"books"]);
  10. NSLog(@"dog.weight = %@", [p valueForKeyPath:@"dog.weight"]);
  11. // 3.4 遍历,让books中存放字典
  12. NSMutableArray *arrayM = [NSMutableArray array];
  13. for (NSDictionary *dict in [p valueForKeyPath:@"books"]) {
  14. LDBook *book = [LDBook bookWithDict:dict];
  15. [arrayM addObject:book];
  16. }
  17. [p setValue:arrayM forKeyPath:@"books"];
  18. NSLog(@"books = %@", [p valueForKeyPath:@"books"]);

4. KVC取值

  
  
  1. NSMutableArray *tempM = [NSMutableArray array];
  2. // 4.1 kvc取出出数组books中price的值
  3. for (LDBook *book in [p valueForKeyPath:@"books"]) {
  4. [tempM addObject:[book valueForKeyPath:@"price"]];
  5. }
  6. NSLog(@"%@", tempM);
  7. // 4.2 kvc取出数组中price的最大值/最小值/平均值/个数
  8. NSLog(@"Max = %@", [[p valueForKeyPath:@"books"] valueForKeyPath:@"@max.price"]);
  9. NSLog(@"Min = %@", [[p valueForKeyPath:@"books"] valueForKeyPath:@"@min.price"]);
  10. NSLog(@"Avg = %@", [[p valueForKeyPath:@"books"] valueForKeyPath:@"@avg.price"]);
  11. NSLog(@"count = %@", [[p valueForKeyPath:@"books"] valueForKeyPath:@"@count.price"]);

二. KVO : Key Value OBserver (观察者)

通过KVO可以观察某一个对象的属性值发生改变

1. 给Person创建一个观察者,观察Person的name属性

  
  
  1. [p addObserver:self forKeyPath:@"name" options:NSKeyValueObservingOptionNew | NSKeyValueObservingOptionOld context:nil];

2. 修改Person的name的值

  
  
  1. [p setValue:@"ldd" forKey:@"name"];
3. 当Person的name的值发生改变时,会回调

- (void)observeValueForKeyPath:(NSString *)keyPath ofObject:(id)object change:(NSDictionary *)change context:(void *)context

  
  
  1. #pragma mark - 实现KVO回调方法
  2. /**
  3. * 当对象的属性发生改变会调用该方法
  4. *
  5. * @param keyPath 监听的属性
  6. * @param object 监听的对象
  7. * @param change 新值和旧值
  8. * @param context 额外的数据
  9. */
  10. - (void)observeValueForKeyPath:(NSString *)keyPath ofObject:(id)object change:(NSDictionary *)change context:(void *)context
  11. {
  12. NSLog(@"KeyPath = %@", keyPath);
  13. NSLog(@"object = %@", object);
  14. NSLog(@"change = %@", change);
  15. }
4. 当回调完成之后销毁观察者,不然会报错,因为person已销毁,而观察者还在
  
  
  1. /**
  2. * 销毁Person的观察者
  3. */
  4. - (void)dealloc
  5. {
  6. [self.person removeObserver:self forKeyPath:@"name" context:nil];
  7. }
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
图像识别技术在病虫害检测中的应用是一个快速发展的领域,它结合了计算机视觉和机器学习算法来自动识别和分类植物上的病虫害。以下是这一技术的一些关键步骤和组成部分: 1. **数据收集**:首先需要收集大量的植物图像数据,这些数据包括健康植物的图像以及受不同病虫害影响的植物图像。 2. **图像预处理**:对收集到的图像进行处理,以提高后续分析的准确性。这可能包括调整亮度、对比度、去噪、裁剪、缩放等。 3. **特征提取**:从图像中提取有助于识别病虫害的特征。这些特征可能包括颜色、纹理、形状、边缘等。 4. **模型训练**:使用机器学习算法(如支持向量机、随机森林、卷积神经网络等)来训练模型。训练过程中,算法会学习如何根据提取的特征来识别不同的病虫害。 5. **模型验证和测试**:在独立的测试集上验证模型的性能,以确保其准确性和泛化能力。 6. **部署和应用**:将训练好的模型部署到实际的病虫害检测系统中,可以是移动应用、网页服务或集成到智能农业设备中。 7. **实时监测**:在实际应用中,系统可以实时接收植物图像,并快速给出病虫害的检测结果。 8. **持续学习**:随着时间的推移,系统可以不断学习新的病虫害样本,以提高其识别能力。 9. **用户界面**:为了方便用户使用,通常会有一个用户友好的界面,显示检测结果,并提供进一步的指导或建议。 这项技术的优势在于它可以快速、准确地识别出病虫害,甚至在早期阶段就能发现问题,从而及时采取措施。此外,它还可以减少对化学农药的依赖,支持可持续农业发展。随着技术的不断进步,图像识别在病虫害检测中的应用将越来越广泛。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值