- iOS——KVO与通知传值
Yeppppppppp
iosjavascript
KVOKVO是什么KVO:Key-ValueObserving,是Foundation框架提供的一种机制,使用KVO,可以方便地对指定对象的某个属性进行观察,当属性发生变化时,进行通知。KVO的用法一般使用KVO时,总共分为三个步骤:设置监听://注册观察者observer:观察者对象;KeyPath:要监测的键路径;options:需要监测的选项;context:上下文用来区分消息;_kvoTe
- iOS——KVO底层学习
糸师凛
ios学习
前情回顾什么是KVO?在之前的博客里我们已经学过:KVO全称KeyValueObserving。KVO传值允许对象监听另一个对象的特定属性,当该属性改变的时候,会触发事件。KVO不仅可以监听单个属性的变化,也可以监听集合对象的变化。监听集合对象的时候,通过KVC的mutableArrayValueForKey:等方法获得代理对象,当代理对象的内部对象发生改变时,会回调KVO监听的方法。集合对象包含
- 【DICOM后处理】qt+vs 实现DICOM数据四视图显示
leafpipi
实战练习qtc++算法图像处理DICOM学习
目录1、DICOM四视图2、vtkImageViewer2实现二维平面图显示3、vtkVolume实现三维体数据显示4、实现界面图1、DICOM四视图DICOM四视图通常指同时显示医学影像的四个不同平面或视角,用于全面分析三维数据(如CT、MRI等)。标准四视图布局:横截面(Axial)水平切面,从上向下观察(类似传统CT/MRI的横断面切片)。显示解剖结构的横向分布,常用于定位病变。矢状面(Sa
- 【Unity 怪物模型合集 】MONSTER PACK VOL 3 高质量怪物角色模型合集,适用于角色扮演(RPG)、动作游戏、塔防、幻想冒险等多类型项目
Unity游戏资源学习屋
Unity插件
MONSTERPACKVOL3是一款专为Unity游戏开发者设计的高质量怪物角色模型合集,适用于角色扮演(RPG)、动作游戏、塔防、幻想冒险等多类型项目。本插件收录了多个风格统一、风格独特的怪物模型,每个怪物都具备完整动画、精细贴图与骨骼系统,旨在帮助开发者快速丰富敌方单位库,构建充满挑战与视觉冲击的战斗体验。主要特点:多样化怪物造型设计:包含多种类型的幻想怪物,如地狱犬、异界飞虫、腐化兽人、骷髅
- QT 5.9.2+VTK8.0实现等高线绘制
csdndenglu
qt开发语言
项目下载链接:QT5.9.2+VTK8.0实现等高线绘制资源-CSDN文库示例如下:主要代码如下:#include"vtkRenderer.h"#include"vtkRenderWindow.h"#include"vtkRenderWindowInteractor.h"#include"vtkPolyDataMapper.h"#include"vtkVolume16Reader.h"#inclu
- ESP-ADF battery_service组件之voltage_monitor子模块创建与销毁函数详解
omnibots
ESP-ADF架构嵌入式硬件iot
目录ESP-ADFbattery_service组件之voltage_monitor子模块创建与销毁函数详解内部数据结构结构体关系图内部函数分析vol_monitor_param_checkvol_check_timer_hdlr创建与销毁函数分析vol_monitor_createvol_monitor_destroy资源管理总结ESP-ADFbattery_service组件之voltage_
- VTK_Learning_体绘制讨论_光照&阴影、VTKLODProp3D
江南又旧雨
#VTK修炼学习光照阴影VTKLODProp3D
1.光照与阴影通过VTKVolumeProperty可以设置体绘制阴影效果(Shading)。阴影效果主要受环境光系数、散射光系数、反射光系数和高光强度四个参数影响。vtkVolumeProperty::SetAmbient()设置环境光系数vtkVolumeProperty::SetDiffuse()设置散射光系数vtkVolumeProperty::SetSpecular()设置反射光系数一般
- VOSK语音识别工具包使用教程
邴联微
VOSK语音识别工具包使用教程voskVOSKSpeechRecognitionToolkit项目地址:https://gitcode.com/gh_mirrors/vo/vosk1.项目介绍VOSK是一个开源的语音识别工具包,旨在提供高效的语音识别解决方案。VOSK基于大规模信号数据库概念,通过音频指纹技术进行语音识别。它支持多种语言,并且可以在不同的硬件平台上运行,包括Android和Linu
- 2025 Swift 最新面试题及答案
九变形战士
移动开发swift开发语言ios
2024Swift最新面试题及答案基础部分Swift访问控制Swift`Any`、`AnyObject`和`Generics`区别Swift`final`关键字⽤过没主要⽤来⼲嘛Swift的`static`和`class`区别Swift的`extension`⽤过没,都能⼲嘛Swift中的Optional是什么?如何安全解包?Swift有什么⽅案能监听属性值的变化,不使用ObjC的KVO进阶部分说
- 从小公司到进大厂,我的进阶学习之旅!
iOS面试题Swift
iOS开发iOSios移动开发
iOS高级进发OC源码下载地址苹果开发文档如何阅读苹果开发文档GNUstep是GNU计划的项目之一,它将Cocoa的OC库重新开源实现了一遍源码地址:http://www.gnustep.org/resources/downloads.php虽然GNUstep不是苹果官方源码,但还是具有一定的参考价值iOS底层1、一个NSObject对象占用多少内存2、OC对象的分类3、KVO实现原理4、KVC实
- 「iOS」通过CoreLocation Framework深入了解MVC架构
小鹿撞出了脑震荡
iosmvc架构
「iOS」通过CoreLocationFramework重新了解多界面传值以及MVC架构文章目录「iOS」通过CoreLocationFramework重新了解多界面传值以及MVC架构前言CoreLocation了解根据需求建模设计属性方法设计协议传值Block传值KVONotification通知方式总结参考文章前言在这个学期的前段时间进行了MVC的相关学习,并且使用MVC完成了知乎日报奥的项目
- Ilya新公司获10亿美元融资;支付宝将发布AI独立App支小宝 | AI头条
AI科技大本营
人工智能搜索引擎
整理|王启隆出品|AI科技大本营(ID:rgznai100)一分钟速览新闻点!前OpenAI联合创始人新公司获10亿美元融资支付宝将发布AI独立App支小宝Transformer作者创业公司Sakana.AI获1亿美元A轮融资2024外滩大会开幕,凯文・凯利谈AI时代三大趋势零一万物发布Yi-Coder系列模型微软Win11中发现国产开源大模型RWKVOpenAI定制聊天机器人市场乱象丛生AI初创
- Dot Leap 20 中文版
区块链生存指南
原文作者:BrunoŠkvorc原文链接:DotLeap.com订阅链接:dotleap.substack.comSubstrate区块链工具和界面开发教程,访问DotLeap.com(CANAAN注:中文教程可以访问Boka.network)DotLeap上线SubsocialSubsocial是一个基于substrate开发的社交链,功能上整合了Reddit,Twitter,Facebook,
- ios面试热门问题二
hong161688
ios面试ios面试cocoa
iOS中的KVO(Key-ValueObserving)是什么?它的作用和使用场景是什么?iOS中的KVO(Key-ValueObserving),全称为键值观察/监听,是苹果提供的一套事件通知机制。它允许一个对象(观察者)观察/监听另一个对象(被观察者)指定属性值的改变。当被观察对象的属性值发生变化时,KVO会自动触发监听方法,通知观察者进行相应的处理。以下是关于KVO的详细解释:KVO的作用K
- 推荐超好用的 6 款 Laravel Admin 管理模版
码匠官方账号
低代码前端后端laravel
全文3440字阅读时间约11分钟目录LaravelAdmin管理后台模板的不同类型脚手架CRUD可视化编程主题和组件库付费/开源码匠LaravelAdmin管理后台模板推荐LaravelNovaOrchidBackpackVoyagerInfyOmLaravelGeneratorArgon写在最后如果您正在为您的企业调研开发Admin管理后台的最佳方案,那么基于PHP的Laravel框架会是一个不
- mybatis update操作返回值
yyyyyuanxian
JDBCmybatis
MySQL返回的消息:10:50:14UPDATEPMT_CN.TMPLTSETSHOW_RANK=‘0’WHERE(TMPLT_ID=‘123456’)0row(s)affectedRowsmatched:1Changed:0Warnings:00.000sec代码中拿到的结果:intresult=cardTemplateDAO.updateShowRank(showRankVO);//1这个返
- iOS基础知识点012
i爱吃土豆的猫
图像http://blog.csdn.net/morewindows/article/details/73927491.KVODelegationNSNotification特点:1.1通知:通知比较灵活,不需要编写多少代码,实现比较简单;对于一个发出的通知,多个对象能够做出反应,即1对多的方式1.2代理:代理的语法比较严格,如果delegate中的一个方法没有实现那么就会出现编译警告,需要定义很
- 如何使用KVO对NSMutableArray进行监听
___1o_8o
[NSObjectmutableArrayValueForKey:]通过上面的方法获取到mutableArray并进行操作则可以对数组进行监听@property(nonatomic,strong)NSMutableArray*mtbArray;[[selfmutableArrayValueForKey:@"mtbArray"]removeObjectAtIndex:0];[[selfmutable
- 2018W1 | 5.14-5.20 | 周总结
Levi段玉磊
工作主要完成了大部分UI方面的工作,完成游戏结算页面的功能以及UI。做了一个H5游戏下载器,并与客户端以及服务端同事进行联调。读完《编写高质量代码的52个有效方法》这本书。对KVO/KVC机制有了更加深度的理解电影黑衣人1最打动人的情节,莫过于K探员为自己的工作奔劳了30多年,最终为了家庭,放弃所有,哪怕是30年的记忆,只因为爱,不忘初心。那我们工作的目的是为了什么?阅读精进:如何成为一个很厉害的
- 《深度学习之TensorFlow工程化项目实战》李金洪PDF
ACC_e1c1
《深度学习之TensorFlow工程化项目实战》李金洪PDF网盘链接:https://pan.baidu.com/s/13bDr0RunkvOZB8Uupj3nAQ提取码:8m3t
- iOS KVC & KVO
SnoopPanda
KVCKVC全称Key-ValueCoding,俗称“键值编码”,可以通过Key来访问某个属性,写在NSObject的NSKeyValueCoding分类下面。常用方法-(void)setValue:(nullableid)valueforKey:(NSString*)key;-(void)setValue:(nullableid)valueforKeyPath:(NSString*)keyPat
- BAT大厂最爱问的Java核心面试百题详细解析!帮你突破瓶颈
6年老Java
程序员java经验分享面试
线程线程的启动实现Runnab1e接口继承Thread类实现Callable接口线程的状态线程的方法线程的优先级守护线程未捕获异常处理器并发编程的问题线程引入开销:上下文切换与内存同步线程安全性(原子性+可见性)死锁线程间通信/线程同步工具使用synchronizedLockvolatileAtomicLock使用深入可重入锁ReentrantLockCondition与wait¬ify区别
- Block用法
陌巷先森
概述block:苹果在iOS4开始引入的对C语言的扩展,用来实现匿名函数的特性。匿名函数:没有函数名的函数,一对{}包裹的内容是匿名函数的作用域。block语法block变量声明:返回值类型(^block变量名)(参数列表);//声明一个无返回值,有两个int类型参数的,叫做blk的blockvoid(^blk)(inta,intb);block表达式语法:^返回值类型(参数列表){表达式};//
- OC底层原理18 - KVO
卡布奇诺_95d2
简介KVO,全称为Key-Valueobserving,中文名为键值观察,KVO是一种机制,它允许将其他对象的指定属性的更改通知给对象。在Key-ValueObservingProgrammingGuide官方文档中,又这么一句话:理解KVO之前,必须先理解KVC(即KVO是基于KVC基础之上)。KVC是键值编码,在对象创建完成后,可以动态的给对象属性赋值,而KVO是键值观察,提供了一种监听机制,
- 最新版本的网卡版BadUSB 橡皮鸭 (功能强大)
黄鱼脑干细胞
linuxbadusbraspberry
我们需要pizerow和usb扩展板写好sd卡首先登入这个wifi:Ⓟ➃ⓌⓃ❶passwd:MaMe82-P4wnP1http://172.24.0.1:8000打开这个地址设置你的橡皮鸭kalilinuxsd卡镜像地址:(这是我能找到的最新版的kalilinux版本)链接:https://pan.baidu.com/s/16yId4shHICARCRWKvoZzNg?pwd=6666登入ssh:
- 学习数据结构和算法的第3天
blxx
算法数据结构学习
常数循环的复杂度计算Func4的时间复杂度voidFunc4(intN){intcount=0;for(intk=0;kvoidconstchar*strchr(constchar*str,intcharacter);{while(*str){if(*str==character)return0;else++str;}}假设查找的是h1最好情况:任意输入规模的最小运行次数(下界)假设查找的是wN/
- docke 常用的命令
初原挽风
docker
docker常用的命令imagescontainernetworkvolumenormalDockerfileimages查看所有镜像dockerimagels拉取镜像dockerpull:删除镜像dockerimagerm删除所有没有使用的镜像dockerimageprunecontainer创建容器dockercreate可选参数:-name为容器命名-d后台运行-p指定端口映射-e创建环境变
- 蚂蚁金服p4笔试部分,答案如下
极客夜读
蚂蚁金服面试题,答案见最下方1:在KVO中,他是怎么知道监听的对象发生了变化?2:字典的工作原理?怎100w个中是怎么快速去取value?3:一个上线的项目,知道这个方法可能会出问题,在不破坏改方法前提下,怎么搞?4:Block和函数指针的区别?我有一个iOS免费内推交流群,群里有群员内推,有面试交流,有技术讨论,有需要的加群:637919808群内交流情况:内推面试题答案:自己做的,有需要修改的
- iOS -RAC使用
搬砖的crystal
一、简介ReactiveCocoa可以说是结合了函数式编程和响应式编程的框架,也可称其为函数响应式编程(FRP)框架,强调一点,RAC最大的优点是提供了一个单一的、统一的方法去处理异步的行为,包括delegate方法,blocks回调,target-action机制,notifications和KVO。导入在项目的podfile文件中添加#RACpod'ReactiveObjC'在使用时导入#im
- iOS KVO机制
水煮杰尼龟
来自官方文档的使用步骤step调用addObserver:forKeyPath:options:context:方法来注册观察者在观察者内实现observeValueForKeyPath:ofObject:change:context:可以接收到属性发生变化的通知当观察者不再需要接收消息时,需要调用removeObserver:forKeyPath:移除监听,至少应在观察者释放之前调用。我们先
- PHP,安卓,UI,java,linux视频教程合集
cocos2d-x小菜
javaUIPHPandroidlinux
╔-----------------------------------╗┆
- 各表中的列名必须唯一。在表 'dbo.XXX' 中多次指定了列名 'XXX'。
bozch
.net.net mvc
在.net mvc5中,在执行某一操作的时候,出现了如下错误:
各表中的列名必须唯一。在表 'dbo.XXX' 中多次指定了列名 'XXX'。
经查询当前的操作与错误内容无关,经过对错误信息的排查发现,事故出现在数据库迁移上。
回想过去: 在迁移之前已经对数据库进行了添加字段操作,再次进行迁移插入XXX字段的时候,就会提示如上错误。
&
- Java 对象大小的计算
e200702084
java
Java对象的大小
如何计算一个对象的大小呢?
 
- Mybatis Spring
171815164
mybatis
ApplicationContext ac = new ClassPathXmlApplicationContext("applicationContext.xml");
CustomerService userService = (CustomerService) ac.getBean("customerService");
Customer cust
- JVM 不稳定参数
g21121
jvm
-XX 参数被称为不稳定参数,之所以这么叫是因为此类参数的设置很容易引起JVM 性能上的差异,使JVM 存在极大的不稳定性。当然这是在非合理设置的前提下,如果此类参数设置合理讲大大提高JVM 的性能及稳定性。 可以说“不稳定参数”
- 用户自动登录网站
永夜-极光
用户
1.目标:实现用户登录后,再次登录就自动登录,无需用户名和密码
2.思路:将用户的信息保存为cookie
每次用户访问网站,通过filter拦截所有请求,在filter中读取所有的cookie,如果找到了保存登录信息的cookie,那么在cookie中读取登录信息,然后直接
- centos7 安装后失去win7的引导记录
程序员是怎么炼成的
操作系统
1.使用root身份(必须)打开 /boot/grub2/grub.cfg 2.找到 ### BEGIN /etc/grub.d/30_os-prober ### 在后面添加 menuentry "Windows 7 (loader) (on /dev/sda1)" { 
- Oracle 10g 官方中文安装帮助文档以及Oracle官方中文教程文档下载
aijuans
oracle
Oracle 10g 官方中文安装帮助文档下载:http://download.csdn.net/tag/Oracle%E4%B8%AD%E6%96%87API%EF%BC%8COracle%E4%B8%AD%E6%96%87%E6%96%87%E6%A1%A3%EF%BC%8Coracle%E5%AD%A6%E4%B9%A0%E6%96%87%E6%A1%A3 Oracle 10g 官方中文教程
- JavaEE开源快速开发平台G4Studio_V3.2发布了
無為子
AOPoraclemysqljavaeeG4Studio
我非常高兴地宣布,今天我们最新的JavaEE开源快速开发平台G4Studio_V3.2版本已经正式发布。大家可以通过如下地址下载。
访问G4Studio网站
http://www.g4it.org
G4Studio_V3.2版本变更日志
功能新增
(1).新增了系统右下角滑出提示窗口功能。
(2).新增了文件资源的Zip压缩和解压缩
- Oracle常用的单行函数应用技巧总结
百合不是茶
日期函数转换函数(核心)数字函数通用函数(核心)字符函数
单行函数; 字符函数,数字函数,日期函数,转换函数(核心),通用函数(核心)
一:字符函数:
.UPPER(字符串) 将字符串转为大写
.LOWER (字符串) 将字符串转为小写
.INITCAP(字符串) 将首字母大写
.LENGTH (字符串) 字符串的长度
.REPLACE(字符串,'A','_') 将字符串字符A转换成_
- Mockito异常测试实例
bijian1013
java单元测试mockito
Mockito异常测试实例:
package com.bijian.study;
import static org.mockito.Mockito.mock;
import static org.mockito.Mockito.when;
import org.junit.Assert;
import org.junit.Test;
import org.mockito.
- GA与量子恒道统计
Bill_chen
JavaScript浏览器百度Google防火墙
前一阵子,统计**网址时,Google Analytics(GA) 和量子恒道统计(也称量子统计),数据有较大的偏差,仔细找相关资料研究了下,总结如下:
为何GA和量子网站统计(量子统计前身为雅虎统计)结果不同?
首先:没有一种网站统计工具能保证百分之百的准确出现该问题可能有以下几个原因:(1)不同的统计分析系统的算法机制不同;(2)统计代码放置的位置和前后
- 【Linux命令三】Top命令
bit1129
linux命令
Linux的Top命令类似于Windows的任务管理器,可以查看当前系统的运行情况,包括CPU、内存的使用情况等。如下是一个Top命令的执行结果:
top - 21:22:04 up 1 day, 23:49, 1 user, load average: 1.10, 1.66, 1.99
Tasks: 202 total, 4 running, 198 sl
- spring四种依赖注入方式
白糖_
spring
平常的java开发中,程序员在某个类中需要依赖其它类的方法,则通常是new一个依赖类再调用类实例的方法,这种开发存在的问题是new的类实例不好统一管理,spring提出了依赖注入的思想,即依赖类不由程序员实例化,而是通过spring容器帮我们new指定实例并且将实例注入到需要该对象的类中。依赖注入的另一种说法是“控制反转”,通俗的理解是:平常我们new一个实例,这个实例的控制权是我
- angular.injector
boyitech
AngularJSAngularJS API
angular.injector
描述: 创建一个injector对象, 调用injector对象的方法可以获得angular的service, 或者用来做依赖注入. 使用方法: angular.injector(modules, [strictDi]) 参数详解: Param Type Details mod
- java-同步访问一个数组Integer[10],生产者不断地往数组放入整数1000,数组满时等待;消费者不断地将数组里面的数置零,数组空时等待
bylijinnan
Integer
public class PC {
/**
* 题目:生产者-消费者。
* 同步访问一个数组Integer[10],生产者不断地往数组放入整数1000,数组满时等待;消费者不断地将数组里面的数置零,数组空时等待。
*/
private static final Integer[] val=new Integer[10];
private static
- 使用Struts2.2.1配置
Chen.H
apachespringWebxmlstruts
Struts2.2.1 需要如下 jar包: commons-fileupload-1.2.1.jar commons-io-1.3.2.jar commons-logging-1.0.4.jar freemarker-2.3.16.jar javassist-3.7.ga.jar ognl-3.0.jar spring.jar
struts2-core-2.2.1.jar struts2-sp
- [职业与教育]青春之歌
comsci
教育
每个人都有自己的青春之歌............但是我要说的却不是青春...
大家如果在自己的职业生涯没有给自己以后创业留一点点机会,仅仅凭学历和人脉关系,是难以在竞争激烈的市场中生存下去的....
&nbs
- oracle连接(join)中使用using关键字
daizj
JOINoraclesqlusing
在oracle连接(join)中使用using关键字
34. View the Exhibit and examine the structure of the ORDERS and ORDER_ITEMS tables.
Evaluate the following SQL statement:
SELECT oi.order_id, product_id, order_date
FRO
- NIO示例
daysinsun
nio
NIO服务端代码:
public class NIOServer {
private Selector selector;
public void startServer(int port) throws IOException {
ServerSocketChannel serverChannel = ServerSocketChannel.open(
- C语言学习homework1
dcj3sjt126com
chomework
0、 课堂练习做完
1、使用sizeof计算出你所知道的所有的类型占用的空间。
int x;
sizeof(x);
sizeof(int);
# include <stdio.h>
int main(void)
{
int x1;
char x2;
double x3;
float x4;
printf(&quo
- select in order by , mysql排序
dcj3sjt126com
mysql
If i select like this:
SELECT id FROM users WHERE id IN(3,4,8,1);
This by default will select users in this order
1,3,4,8,
I would like to select them in the same order that i put IN() values so:
- 页面校验-新建项目
fanxiaolong
页面校验
$(document).ready(
function() {
var flag = true;
$('#changeform').submit(function() {
var projectScValNull = true;
var s ="";
var parent_id = $("#parent_id").v
- Ehcache(02)——ehcache.xml简介
234390216
ehcacheehcache.xml简介
ehcache.xml简介
ehcache.xml文件是用来定义Ehcache的配置信息的,更准确的来说它是定义CacheManager的配置信息的。根据之前我们在《Ehcache简介》一文中对CacheManager的介绍我们知道一切Ehcache的应用都是从CacheManager开始的。在不指定配置信
- junit 4.11中三个新功能
jackyrong
java
junit 4.11中两个新增的功能,首先是注解中可以参数化,比如
import static org.junit.Assert.assertEquals;
import java.util.Arrays;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.junit.runn
- 国外程序员爱用苹果Mac电脑的10大理由
php教程分享
windowsPHPunixMicrosoftperl
Mac 在国外很受欢迎,尤其是在 设计/web开发/IT 人员圈子里。普通用户喜欢 Mac 可以理解,毕竟 Mac 设计美观,简单好用,没有病毒。那么为什么专业人士也对 Mac 情有独钟呢?从个人使用经验来看我想有下面几个原因:
1、Mac OS X 是基于 Unix 的
这一点太重要了,尤其是对开发人员,至少对于我来说很重要,这意味着Unix 下一堆好用的工具都可以随手捡到。如果你是个 wi
- 位运算、异或的实际应用
wenjinglian
位运算
一. 位操作基础,用一张表描述位操作符的应用规则并详细解释。
二. 常用位操作小技巧,有判断奇偶、交换两数、变换符号、求绝对值。
三. 位操作与空间压缩,针对筛素数进行空间压缩。
&n
- weblogic部署项目出现的一些问题(持续补充中……)
Everyday都不同
weblogic部署失败
好吧,weblogic的问题确实……
问题一:
org.springframework.beans.factory.BeanDefinitionStoreException: Failed to read candidate component class: URL [zip:E:/weblogic/user_projects/domains/base_domain/serve
- tomcat7性能调优(01)
toknowme
tomcat7
Tomcat优化: 1、最大连接数最大线程等设置
<Connector port="8082" protocol="HTTP/1.1"
useBodyEncodingForURI="t
- PO VO DAO DTO BO TO概念与区别
xp9802
javaDAO设计模式bean领域模型
O/R Mapping 是 Object Relational Mapping(对象关系映射)的缩写。通俗点讲,就是将对象与关系数据库绑定,用对象来表示关系数据。在O/R Mapping的世界里,有两个基本的也是重要的东东需要了解,即VO,PO。
它们的关系应该是相互独立的,一个VO可以只是PO的部分,也可以是多个PO构成,同样也可以等同于一个PO(指的是他们的属性)。这样,PO独立出来,数据持