OC:跟随小码哥一起学习KVC,42岁程序员面试-程序员宅基地

技术标签: 2024年程序员学习  学习  面试  cocoa  


文章目录

  • 1、KVC原理

    • 1.1、setValue:forKey:的赋值原理

    • 1.2、valueForKey:的取值原理

  • 2、KVC赋值

  • 3、KVC取值与集合处理

  • 4、Key 与 KeyPath 的区别

  • 5、模型转换

KVC 全拼 key-value-coding,翻译过来即为 键值编码 。可以直接访问对象的属性,或者给对象的属性赋值。黑魔法之一,很多高级的iOS开发技巧都是基于KVC实现的。

**本片文章主要讲解,KVC的实现原理、注意细节、实际应用:

KVC原理、KVC赋值和取值,KVC的key、keyPath注意点、KVC的集合处理、数模转换。**

这里先创建两个对象,用于下面的举例应用


#import <Foundation/Foundation.h>



@interface Author : NSObject{

    NSString *_name;

    //作者出版的书籍,一个作者对应多个书籍对象

    NSArray *_issueBook;

}



@end

//---------------------

#import "Author.h"



@implementation Author



@end






#import <Foundation/Foundation.h>

#import "Author.h"



@interface Book : NSObject{

    Author *_author;

}

//名字

@property(nonatomic,copy) NSString *name;

///价格

@property(nonatomic,assign)float price;

@end



//---------------------

#import "Book.h"

@implementation Book



@end





1、KVC原理

==========================================================================

首先,两张图带你去了解,KVC的赋值和取值的原理:

1.1、setValue:forKey:的赋值原理


在这里插入图片描述

accessInstanceVariablesDirectly方法的默认返回值是YES,如下:


+ (BOOL)accessInstanceVariablesDirectly {

    return YES;

}



1.2、valueForKey:的取值原理


在这里插入图片描述

2、KVC赋值

==========================================================================

通过键值路径为对象的属性赋值。一般用于私有的属性赋值:


    //----------    KVC键值编码    --------

    Author *author = [[Author alloc] init];

    //设置属性值

    [author setValue:@"莫言" forKey:@"name"];



如果对象A中的属性含有是一个对象B,设置对象B的属性必须使用 forKeyPath 方法:


    //-------   KVC设置作者的书籍数组   -------

    //键值路径:对于一个类中有数组对象的属性进行便捷操作

    Book *book1 = [[Book alloc] init];

    book1.name = @"红高粱";

    book1.price = 9;

    Book *book2 = [[Book alloc] init];

    book2.name = @"蛙";

    book2.price = 6;

    NSArray *array = [NSArray arrayWithObjects:book1,book2, nil];

    [author setValue:array forKeyPath:@"issueBook"];



3、KVC取值与集合处理

===============================================================================

通过键值路径获取属性的值。一般通过key值获得私有属性的值。


	//获取属性值

    NSString *name = [author valueForKey:@"name"];

    NSLog(@"%@",name);



可以通过keypath获得值:

自我介绍一下,小编13年上海交大毕业,曾经在小公司待过,也去过华为、OPPO等大厂,18年进入阿里一直到现在。

深知大多数Android工程师,想要提升技能,往往是自己摸索成长或者是报班学习,但对于培训机构动则几千的学费,着实压力不小。自己不成体系的自学效果低效又漫长,而且极易碰到天花板技术停滞不前!

因此收集整理了一份《2024年Android移动开发全套学习资料》,初衷也很简单,就是希望能够帮助到想自学提升又不知道该从何学起的朋友,同时减轻大家的负担。
img
img
img
img
img
img
img

既有适合小白学习的零基础资料,也有适合3年以上经验的小伙伴深入学习提升的进阶课程,基本涵盖了95%以上Android开发知识点,真正体系化!

由于文件比较大,这里只是将部分目录大纲截图出来,每个节点里面都包含大厂面经、学习笔记、源码讲义、实战项目、讲解视频,并且后续会持续更新

如果你觉得这些内容对你有帮助,可以添加V获取:vip204888 (备注Android)
img

最后

今天关于面试的分享就到这里,还是那句话,有些东西你不仅要懂,而且要能够很好地表达出来,能够让面试官认可你的理解,例如Handler机制,这个是面试必问之题。有些晦涩的点,或许它只活在面试当中,实际工作当中你压根不会用到它,但是你要知道它是什么东西。

最后在这里小编分享一份自己收录整理上述技术体系图相关的几十套腾讯、头条、阿里、美团等公司2021年的面试题,把技术点整理成了视频和PDF(实际上比预期多花了不少精力),包含知识脉络 + 诸多细节,由于篇幅有限,这里以图片的形式给大家展示一部分。

还有 高级架构技术进阶脑图、Android开发面试专题资料,高级进阶架构资料 帮助大家学习提升进阶,也节省大家在网上搜索资料的时间来学习,也可以分享给身边好友一起学习。

【Android核心高级技术PDF文档,BAT大厂面试真题解析】

【算法合集】

【延伸Android必备知识点】

【Android部分高级架构视频学习资源】

Android精讲视频领取学习后更加是如虎添翼!进军BATJ大厂等(备战)!现在都说互联网寒冬,其实无非就是你上错了车,且穿的少(技能),要是你上对车,自身技术能力够强,公司换掉的代价大,怎么可能会被裁掉,都是淘汰末端的业务Curd而已!现如今市场上初级程序员泛滥,这套教程针对Android开发工程师1-6年的人员、正处于瓶颈期,想要年后突破自己涨薪的,进阶Android中高级、架构师对你更是如鱼得水,赶快领取吧!

d必备知识点】**

[外链图片转存中…(img-IR7Zkp44-1711983340947)]

【Android部分高级架构视频学习资源】

Android精讲视频领取学习后更加是如虎添翼!进军BATJ大厂等(备战)!现在都说互联网寒冬,其实无非就是你上错了车,且穿的少(技能),要是你上对车,自身技术能力够强,公司换掉的代价大,怎么可能会被裁掉,都是淘汰末端的业务Curd而已!现如今市场上初级程序员泛滥,这套教程针对Android开发工程师1-6年的人员、正处于瓶颈期,想要年后突破自己涨薪的,进阶Android中高级、架构师对你更是如鱼得水,赶快领取吧!

本文已被CODING开源项目:《Android学习笔记总结+移动架构视频+大厂面试真题+项目实战源码》收录

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/2401_83977554/article/details/137249775

智能推荐

python学习十一:python常用模块使用,如 加密模块pyarmor,时间模块time等_pyarmor使用-程序员宅基地

文章浏览阅读989次。前言整理一下经常使用到的模块一、加密模块pyarmor在公司上班的时候,有一次要发布python代码,设计到对代码的保密,需要进行加密。因此对python代码加密需要用到pyarmor模块。先进行安装pyarmor 模块pip install pyarmor 默认安装到全局。安装完就可以加密了,我这里通过案例进行笔记。实例 1: 加密脚本# 使用 obfuscate 加密路径 `examples/simple` 的下面的所有脚本pyarmor obfuscate --recursive e_pyarmor使用

tensor.equal、eq、ge、gt、le、lt、ne、sort、topk、kthvalue、isfinite、isinf、isnan_tensor.ne-程序员宅基地

文章浏览阅读1.2k次。import torcha = torch.rand(2, 3)b = torch.rand(2, 3)# 会比较shape 和 值是否都相同,相同则只返回一个TRUE或者FALSEprint('\n',torch.equal(a, b))# 以下的是要对每一个元素进行比较,print('\n', torch.eq(a, b))print('大于等于\n',torch.ge(a, b))print('大于\n',torch.gt(a, b))print('小于等于\n',torc..._tensor.ne

>>Python:Anaconda3_sshpass-1.06.tar.gz-程序员宅基地

文章浏览阅读452次。Anaconda31、安装1、命令操作安装好之后,可以使用命令conda,可以使用一系列命令参数,conda --help 或 conda -h 、 conda --version 或 conda -V例如,使用conda info 命令如下所示信息:$xxx:~ xxx$ conda info active environment : None shell level : 0 user config file : /Users/xxx/.cond_sshpass-1.06.tar.gz

Learning and Using Jakarta Digester-程序员宅基地

文章浏览阅读601次。今天有空再度学习Struts1.3.9的源码,感觉对org.apache.commons.digester.Digester的认识还很少,上网看了一篇文章讲的比较好,特此转载! 文章出处:http://www.onjava.com/pub/a/onjava/2002/10/23/digester.html?page=1 文章中的案例解释: //生成一个digester。主要

自己封装的文件服务苹果手机无法播放视频-程序员宅基地

文章浏览阅读370次。自己封装的文件服务苹果手机无法播放视频

网鼎杯第四场 shenyue2 writeup_ctf shenyue2-程序员宅基地

文章浏览阅读987次。1. shenyue2题目分析这是一道RSA相关的密码学题目,给出了RSA相关的公钥(n,e)(n,e)(n,e),并且给出了额外的两个参数:一个已知素数rrr以及kkk,并且有如下关系: k=(p−r)dk=(p−r)dk=(p-r)d 其实这是一道2018 CodeGate CTF 的原题,直接按照CTF-WIKI中介绍的解法就可以求出来。而我写这篇文章的目的是向大家介绍另外一种方法,..._ctf shenyue2

随便推点

R语言-用R眼看琅琊榜小说的正确姿势-程序员宅基地

文章浏览阅读1k次。博客总目录:http://www.cnblogs.com/weibaar/p/4507801.html目录:零:写在前面的一些废话 一、R眼看琅琊榜的基本原理 1、导入数据 2、筛选数据 3、多条件筛选对话 4、导出数据 二、R眼看琅琊榜的基础分析 1、快速对文本分章节 2、快速定位人物出场章节 3、快速定位人物互动章节 三、总结..._sa=sample(1: length)

Cadence OrCAD原理图如何统计元件总数量_cadence 怎样统计smd数量-程序员宅基地

文章浏览阅读4.3k次。Cadence OrCAD原理图如何统计元件总数量本章节教大家如何在Cadence OrCAD原理图如何统计元件总数量操作方法:1、打开原理图文件(File ——Open——Design)。2 、鼠标单击选中根目录下DSN文件夹,右键选择Edit Objecet Properties。3、点击Pivot将横向视图变成纵向视图,选中下方菜单栏Parts。4、将右侧滑块到最下方,就能看..._cadence 怎样统计smd数量

TensorFlow-模型的保存和调用(freeze方式)_freeze tensorflow-程序员宅基地

文章浏览阅读2.1k次。TensorFlow-模型的保存和调用(freeze方式)硬件:NVIDIA-GTX1080软件:Windows7、python3.6.5、tensorflow-gpu-1.4.0一、基础知识freeze:将ckpt的三个文件融合为一个文件,将variables转换为constant,文件更小,更易于移植二、代码展示1、保存模型import tensorflow as..._freeze tensorflow

HttpWebRequest用ip代理Timeout和ReadWriteTimeout失效不听话问题_webrequest 代理 超时没用-程序员宅基地

文章浏览阅读842次。【CSharp 学习笔记】关于ManualResetEvent的用法解决方案:利用ManualResetEvent,使用方面见上面链接 ManualResetEvent mre = new ManualResetEvent(false); var result=""; mre = new ManualRe..._webrequest 代理 超时没用

spring 自定义注解,动态注入Bean-程序员宅基地

文章浏览阅读5k次,点赞3次,收藏18次。文章目录背景ImportBeanDefinitionRegistrar1.定义注解2.启动注解3.实现接口4.扫描器5.使用Bean6.使用注解7.启动类总结背景@Configuration 注解的类会被spring自动的扫描注入为Bean,如果想自己定义一个注解实现相同的功能如何来实现ImportBeanDefinitionRegistrar熟悉spring源码的同学应该知道,注册bean实际上就是注册beandefinition这个类刚好有接口可以实现default void regis

Qt实现TCP网络通信_qt tcpserver-程序员宅基地

文章浏览阅读1.6k次,点赞2次,收藏8次。用Qt实现TCP服务器与客户端的信息收发_qt tcpserver

推荐文章

热门文章

相关标签