- Flutter Web持久化存储SharedPreferences原理
夏目艾拉
flutter
前言在Flutter中,类似于Android,SharedPreferences是一种用于持久化存储键值对数据的机制实现原理对于移动平台(如Android和iOS),SharedPreferences利用了各自平台的持久化存储能力。在Android上,它使用轻量级的Key-Value存储系统,在iOS上,使用UserDefaults对于Web平台,SharedPreferences的实现有所不同,
- IOS-数据持久化UserDefaults简单使用-Swift
饼子会飞
IOS-Swift学习iosswift开发语言持久化UserDefaults
UserDefaults通过key-value的一种持久化方案,以键值对的形式存储基本类型数据,类似与安卓的SharePreferences。使用方式,首先就是要获取standerdletuserDefault=UserDefaults.standard存取字符串//存取字符串vargreeting="Hello,playground"userDefault.setValue(greeting,f
- iOS获取当前系统语言问题
小呀小苹果呀
主题获取系统语言或APP内的当前语言有几种方法//从userDefault中获取到的,返回的是一个数组,表示在当前APP下使用过的。["zh-Hans-CN","en"]letuserLanguage=UserDefaults.standard.object(forKey:"AppleLanguages")//用户在手机系统设置里设置的首选语言列表。可以通过设置-通用-语言与地区-首选语言顺序看到
- iOS多语言问题踩过的坑
小呀小苹果呀
letuserLanguage=UserDefaults.standard.object(forKey:"AppleLanguages")//返回的也是数组letappLanguages=Locale.preferredLanguages//返回一个数组letdeviceLanguage=Locale.current.languageCodeletbundleLanguages=Bundle.ma
- 04、iOS本地缓存方案
海森堡_lichangan
iOS
iOS本地缓存方案1、沙盒机制(sandbox)1.1Bundle1.2沙盒原理1.3沙盒结构1.3.1Documents1.3.2Library包含Caches和Preferences目录1.3.3tmp1.3.4xxx.app1.3.5总结2、UserDefaults3、Keychain(钥匙串)3.1、Keychain介绍3.2Keychain的解构3.3Keychain的特点3.4Keyc
- 【iOS】—— 持久化
西邮郭富城
iOS笔记ios数据库
目录一、数据持久化的目的二、iOS中数据持久化方案三、数据持有化方式分类内存缓存磁盘缓存四、沙盒机制介绍五、沙盒的目录结构获取应用程序的沙盒路径访问沙盒目录常用C函数介绍沙盒目录的获取方式沙盒目录介绍六、持久化数据存储方式1.XML属性列表2.Preferences偏好设置(UserDefaults)3.NSKeyedArchiver归档和解档4.数据库存储什么是序列化和反序列化,用来做什么?补充
- 利用runtime保存数据到本地文件,和保存到NS两种UserDefaults中的两种方法
guoguojianshu
1.保存到本地的文件,放在pch文件中的#defineUSERFILE[[NSSearchPathForDirectoriesInDomains(NSDocumentDirectory,NSUserDomainMask,YES)lastObject]stringByAppendingPathComponent:@"hxj"].h文件////DTXUserInfoManager.h//dtx////
- 进程间通信-App Groups
斌小狼
最简单的进程间的数据共享AppGroups此事例对应屏幕共享数据传输、使用时请酌情处理AppGroups创建创建按顺序点击新建及选择哪些应用需要共享同一份数据就把他们的AppGroups设置成同一个扩展中使用那么数据要怎么保存和使用呢?数据读写1_UserDefaults//读取-(void)getDataWithUserDefaults{//初始化一个供AppGroups使用的NSUserDef
- iOS在framework中使用CoreData出现崩溃问题及解决方法
weixin_30451709
移动开发数据库swift
公司项目中有一个功能,保存授权令牌数据。最开始只有一条数据,所以就直接保存在了userdefaults中。后来需要两条数据,还是保存在userdefaults中,其中一条为固定的,另一条不固定可以进行替换或删除。最近又需要保存多条数据,那么usedefaults就不适合了,就考虑使用数据库。iOS中可以选择FMDB或CoreData,两者都是基于SQLite数据库的封装,其中CoreData是苹果
- NSUserDefaults数据持久化
RenZhiYong
importUIKitclassViewController3:UIViewController{letdefaults=UserDefaults.standardvardataSource=[String]()overridefuncviewDidLoad(){super.viewDidLoad()//Doanyadditionalsetupafterloadingtheview.letlabe
- IOS数据管理
飞翔的时光机
ios
在iOS中,没有直接与Android中的SharePreference相对应的概念。而是使用不同的机制来处理应用程序的持久化数据。在iOS中,你可以使用以下几种方法来保存和读取应用程序的数据:UserDefaults(用户默认设置):UserDefaults提供了一种简单的键值存储机制,用于存储应用程序的配置和用户偏好设置。你可以使用UserDefaults存储简单的数据类型,如整数、布尔值、字符
- iOS userDefaults 储存自定义对象序列化
TomHu_blog001
iOSuserDefaults储存自定义对象序列化userDefaults是用来储存一些信息量较小的数据的地方,根据key来定所要存取的内容。userDefaults可以存的数据类型有:NSArray,NSData,NSDictionary,NSMutableDictionary,NSString,NSURL。当我们有一些自定义的对象需要储存时我们去使用userDefaults发现会崩溃:Atte
- iOS判断是否审核中
红太狼的小灰帽丶
就话不多说,上代码就好//保存商店app版本,待用classfuncsaveStoreAppVersion(version:String){UserDefaults.standard.setValue(version,forKey:APP_ID)}//获取商店app版本classfuncgetStoreAppVersion()->String{UserDefaults.standard.value
- 【iOS】iOS持久化
Clearlove_Dianfen
ios
文章目录一.数据持久化的目的二.iOS中数据持久化方案三.数据持有化方式的分类1.内存缓存2.磁盘缓存SDWebImage缓存四.沙盒机制的介绍五.沙盒目录结构1.获取应用程序的沙盒路径2.访问沙盒目录常用C函数介绍3.沙盒目录介绍六.持久化数据存储方式1.XML属性列表2.Preference偏好设置(UserDefaults)3.NSKeyedArchiver归档解档4.数据库存储5.什么是序
- 【iOS】—— 持久化
zxb10
iosxcodeobjective-cswiftmacos
文章目录数据持久化的目的iOS中数据持久化方案数据持久化方式分类内存缓存磁盘缓存沙盒机制获取应用程序的沙盒路径沙盒目录的获取方式持久化数据存储方式XML属性列表Preferences偏好设置(UserDefaults)数据库存储什么是序列化和反序列化,用来做什么?写入和读取plist文件数据持久化的目的快速展示,提升体验已经加载过的数据,用户下次查看时,不需要再次从网络(磁盘)加载,直接展示给用户
- Swift UserDefault和通知使用
bugLife丶
移动开发主流:安卓和苹果开发,而苹果开发主要运用的开发语言是Object-c,从14年起,苹果新推出一门开发语言(Swift)。Swift语言相对于OC最大的区别,就是Swift语言完全是开源的。而且比OC语言语法更加简洁。SwiftUserDefault使用:UserDefaults.standard.set("value",forKey:"key")letvalue=UserDefaults.
- 【iOS】UserDefaults的封装及思考
拔丝豌豆
重做项目时,用UserDefaults缓存了一些简单数据,UserDefaults用的频次稍多一点,就看到一个不太合理的现象。1、每次都要完整的写出UserDefaults.standard,然后才去存取,代码看起来不是很整洁2、key的管理、value的类型没有统一的约束,非常散乱然后就想到了提炼代码。针对问题,出两条对策:1、封装UserDefaults的调用方法,缩减代码量2、整理key和v
- @AppStorage研究
东坡肘子3000
前言在苹果生态的应用中,开发者或多或少都会使用到UserDefaults。我个人习惯将可被用户自定义的配置信息(精度、单位、色彩等)保存在UserDefaults中。随着配置信息的增加,在SwiftUI视图中使用的@AppStorage越来越多。在【健康笔记3】中,我计划开放更多的自定义选项给用户,简单的算下来要有40-50项,在配置视图中更会将所有用到的UserDefaults内容都注入进代码。
- Swift 本地存储的几种方式
GalenWu
IOSios
1.UserDefaults,示例:structdefaultsKeys{staticletkey1="key1"staticletkey2="key2"staticletkey3="key3"}letdefaults=UserDefaults.standard//写入defaults.setValue("SomeStringValue",forKey:defaultsKeys.key1)defa
- iOS 14-WidgetKit-桌面小组件-与宿主APP共享值
DeveloperHZ
本文主要记录userDefault实现宿主APP与小组件的值共享1.使用开发者账号创建主APP与小组件的group,生成groupid2.主APP存储值NSUserDefaults*userDefaults=[[NSUserDefaultsalloc]initWithSuiteName:@"group.com.cocoajason.SwiftUIAndAppDemo"];[userDefaults
- iOS UserDefaults一个注意点
Jux2020
使用UserDefaults保存了一个数据后,在本地沙盒中的plist文件并不是即时改变的,而是会根据系统状态自动在几秒钟之内改变,但是读取数据并不受影响。也就是说即使plist中的数据还没有改变,但是valueForKey取出的数据依然是修改后最新的数据。这里要注意一点,如果是使用的模拟器或者是真机编译,那么每次启动app的沙盒地址会改变。如果在前一次保存数据后,并且plist文件还没有来得及修
- DynamicProperty和propertyWrapper介绍和深入理解
stonly916
本文分两部分,第一部分是介绍常用的属性包装器,第二步部分是自定义属性包装器+动态属性分析一、SwiftUI常用的属性包装器:@AppStorage:全局生效(除App层级),全局发送更新通知,直接操作UserDefaults生效;可存储配置(轻量)数据;@SceneStorage:作用域位为所有SwiftUI视图,可在界面内存储轻量数据,界面注销(非app关闭)则数据清除;@State:作用域位为
- 遇到Type 'Any' has no subscript members
子非鱼7868
今天在请求的时候,需要从UserDefaults取登录存下来的信息结果遇到这个报错,记录一下0.png我在工具类里写了存取的方法2.png在登录成功以后,我将账号密码存起来3png4.png然后在取的时候就报错Type'Any'hasnosubscriptmembers看到Type'Any'我就知道是取得时候,类型出问题了.我存的时候用的是[String:Any]5.png我取得时候0.png问题
- Swift-使用UserDefaults(偏好存储)进行本地数据存储
给点阳光我就灿烂_ab56
一.UserDefaults常用使用场景存储用户偏好设置存储缓存信息轻量级数据存储UserDefaults会在本地存储数据,使得程序进程结束后,仍能保留数据,在下次进入App后,这些数据可以被使用。二.默认支持存储的数据类型NSArrayNSDataNSDateNsDictionaryNsStringNSNumber(BoolIntegerFloatDouble)三.使用方法1.添加(set)//
- 关闭提示 Unable to simultaneously satisfy constraints
简化
UserDefaults.standard.setValue(false,forKey:"_UIConstraintBasedLayoutLogUnsatisfiable")
- Swift下UserDefaults的常见使用和注意事项
蛮荒星域
前言UserDefaults适合存储轻量级的本地客户端数据,这是一种常见的数据持久化方式。(建议:如果是存储大批量的数据不要使用这个方法)基本用法Swift2andaboveStoreUserDefaults.standard.set(true,forKey:"Key")//BoolUserDefaults.standard.set(1,forKey:"Key")//IntegerUserDefa
- swift 自定义@
好快的刀
平时存东西,总用到UserDefaults,每次使用取的时候很麻烦,提供一个好的简单的方案1.自定义@LsqUserDefaultimportUIKit///注意T只能是Codable数据类型@propertyWrapperpublicstructLsqUserDefault{letkey:Stringpublicinit(key:String){self.key=key}publicvarwra
- 今天调试一个如何获取appStore上应用的信息的bug,趟了一次坑,做出笔记
龙图腾1990
今天想要获取appstore上的在线的应用的版本号,发现之前的代码有问题,现在做出笔记,供别人参考,供自己警示1.源代码提示错误提示:YZCHttpService.getAppStoreVersion(success:{(json)inPrint(json)UserDefaults.standard.set(json["version"].stringValue,forKey:"AppStoreV
- swift扩展类-UserDefaults
小角色被占用
简化UserDefaults的操作,特意写了一些扩展类。importFoundation//MARK:settergetterextensionUserDefaults{classfuncsetObject2UserDefaultsZY(value:Any?,key:String)->Void{ifvalue==nil{return;}letuserDefaults:UserDefaults=Us
- (译文)CoreData,NSKeyedArchiver,User Defaults三者之间的比较
代码诗仁
原文链接:点击查看第一篇译文,如果不好就见谅。谢谢。他们是程序员在处理App启动时数据可以持续存在的三种方法。尽管coredata稍微有点复杂,但是当存储必要的结构信息是是非常有帮助的。NSKeyedArchiver相对于coredata来说是相对简单和相对较慢。UserDefaults是持久化数据最简单的方法。CoreData:它主要的优势如下:1:有效快速的查询能力2:数据之间相关联,比如每一
- Spring4.1新特性——Spring MVC增强
jinnianshilongnian
spring 4.1
目录
Spring4.1新特性——综述
Spring4.1新特性——Spring核心部分及其他
Spring4.1新特性——Spring缓存框架增强
Spring4.1新特性——异步调用和事件机制的异常处理
Spring4.1新特性——数据库集成测试脚本初始化
Spring4.1新特性——Spring MVC增强
Spring4.1新特性——页面自动化测试框架Spring MVC T
- mysql 性能查询优化
annan211
javasql优化mysql应用服务器
1 时间到底花在哪了?
mysql在执行查询的时候需要执行一系列的子任务,这些子任务包含了整个查询周期最重要的阶段,这其中包含了大量为了
检索数据列到存储引擎的调用以及调用后的数据处理,包括排序、分组等。在完成这些任务的时候,查询需要在不同的地方
花费时间,包括网络、cpu计算、生成统计信息和执行计划、锁等待等。尤其是向底层存储引擎检索数据的调用操作。这些调用需要在内存操
- windows系统配置
cherishLC
windows
删除Hiberfil.sys :使用命令powercfg -h off 关闭休眠功能即可:
http://jingyan.baidu.com/article/f3ad7d0fc0992e09c2345b51.html
类似的还有pagefile.sys
msconfig 配置启动项
shutdown 定时关机
ipconfig 查看网络配置
ipconfig /flushdns
- 人体的排毒时间
Array_06
工作
========================
|| 人体的排毒时间是什么时候?||
========================
转载于:
http://zhidao.baidu.com/link?url=ibaGlicVslAQhVdWWVevU4TMjhiKaNBWCpZ1NS6igCQ78EkNJZFsEjCjl3T5EdXU9SaPg04bh8MbY1bR
- ZooKeeper
cugfy
zookeeper
Zookeeper是一个高性能,分布式的,开源分布式应用协调服务。它提供了简单原始的功能,分布式应用可以基于它实现更高级的服务,比如同步, 配置管理,集群管理,名空间。它被设计为易于编程,使用文件系统目录树作为数据模型。服务端跑在java上,提供java和C的客户端API。 Zookeeper是Google的Chubby一个开源的实现,是高有效和可靠的协同工作系统,Zookeeper能够用来lea
- 网络爬虫的乱码处理
随意而生
爬虫网络
下边简单总结下关于网络爬虫的乱码处理。注意,这里不仅是中文乱码,还包括一些如日文、韩文 、俄文、藏文之类的乱码处理,因为他们的解决方式 是一致的,故在此统一说明。 网络爬虫,有两种选择,一是选择nutch、hetriex,二是自写爬虫,两者在处理乱码时,原理是一致的,但前者处理乱码时,要看懂源码后进行修改才可以,所以要废劲一些;而后者更自由方便,可以在编码处理
- Xcode常用快捷键
张亚雄
xcode
一、总结的常用命令:
隐藏xcode command+h
退出xcode command+q
关闭窗口 command+w
关闭所有窗口 command+option+w
关闭当前
- mongoDB索引操作
adminjun
mongodb索引
一、索引基础: MongoDB的索引几乎与传统的关系型数据库一模一样,这其中也包括一些基本的优化技巧。下面是创建索引的命令: > db.test.ensureIndex({"username":1}) 可以通过下面的名称查看索引是否已经成功建立: &nbs
- 成都软件园实习那些话
aijuans
成都 软件园 实习
无聊之中,翻了一下日志,发现上一篇经历是很久以前的事了,悔过~~
断断续续离开了学校快一年了,习惯了那里一天天的幼稚、成长的环境,到这里有点与世隔绝的感觉。不过还好,那是刚到这里时的想法,现在感觉在这挺好,不管怎么样,最要感谢的还是老师能给这么好的一次催化成长的机会,在这里确实看到了好多好多能想到或想不到的东西。
都说在外面和学校相比最明显的差距就是与人相处比较困难,因为在外面每个人都
- Linux下FTP服务器安装及配置
ayaoxinchao
linuxFTP服务器vsftp
检测是否安装了FTP
[root@localhost ~]# rpm -q vsftpd
如果未安装:package vsftpd is not installed 安装了则显示:vsftpd-2.0.5-28.el5累死的版本信息
安装FTP
运行yum install vsftpd命令,如[root@localhost ~]# yum install vsf
- 使用mongo-java-driver获取文档id和查找文档
BigBird2012
driver
注:本文所有代码都使用的mongo-java-driver实现。
在MongoDB中,一个集合(collection)在概念上就类似我们SQL数据库中的表(Table),这个集合包含了一系列文档(document)。一个DBObject对象表示我们想添加到集合(collection)中的一个文档(document),MongoDB会自动为我们创建的每个文档添加一个id,这个id在
- JSONObject以及json串
bijian1013
jsonJSONObject
一.JAR包简介
要使程序可以运行必须引入JSON-lib包,JSON-lib包同时依赖于以下的JAR包:
1.commons-lang-2.0.jar
2.commons-beanutils-1.7.0.jar
3.commons-collections-3.1.jar
&n
- [Zookeeper学习笔记之三]Zookeeper实例创建和会话建立的异步特性
bit1129
zookeeper
为了说明问题,看个简单的代码,
import org.apache.zookeeper.*;
import java.io.IOException;
import java.util.concurrent.CountDownLatch;
import java.util.concurrent.ThreadLocal
- 【Scala十二】Scala核心六:Trait
bit1129
scala
Traits are a fundamental unit of code reuse in Scala. A trait encapsulates method and field definitions, which can then be reused by mixing them into classes. Unlike class inheritance, in which each c
- weblogic version 10.3破解
ronin47
weblogic
版本:WebLogic Server 10.3
说明:%DOMAIN_HOME%:指WebLogic Server 域(Domain)目录
例如我的做测试的域的根目录 DOMAIN_HOME=D:/Weblogic/Middleware/user_projects/domains/base_domain
1.为了保证操作安全,备份%DOMAIN_HOME%/security/Defa
- 求第n个斐波那契数
BrokenDreams
今天看到群友发的一个问题:写一个小程序打印第n个斐波那契数。
自己试了下,搞了好久。。。基础要加强了。
&nbs
- 读《研磨设计模式》-代码笔记-访问者模式-Visitor
bylijinnan
java设计模式
声明: 本文只为方便我个人查阅和理解,详细的分析以及源代码请移步 原作者的博客http://chjavach.iteye.com/
import java.util.ArrayList;
import java.util.List;
interface IVisitor {
//第二次分派,Visitor调用Element
void visitConcret
- MatConvNet的excise 3改为网络配置文件形式
cherishLC
matlab
MatConvNet为vlFeat作者写的matlab下的卷积神经网络工具包,可以使用GPU。
主页:
http://www.vlfeat.org/matconvnet/
教程:
http://www.robots.ox.ac.uk/~vgg/practicals/cnn/index.html
注意:需要下载新版的MatConvNet替换掉教程中工具包中的matconvnet:
http
- ZK Timeout再讨论
chenchao051
zookeepertimeouthbase
http://crazyjvm.iteye.com/blog/1693757 文中提到相关超时问题,但是又出现了一个问题,我把min和max都设置成了180000,但是仍然出现了以下的异常信息:
Client session timed out, have not heard from server in 154339ms for sessionid 0x13a3f7732340003
- CASE WHEN 用法介绍
daizj
sqlgroup bycase when
CASE WHEN 用法介绍
1. CASE WHEN 表达式有两种形式
--简单Case函数
CASE sex
WHEN '1' THEN '男'
WHEN '2' THEN '女'
ELSE '其他' END
--Case搜索函数
CASE
WHEN sex = '1' THEN
- PHP技巧汇总:提高PHP性能的53个技巧
dcj3sjt126com
PHP
PHP技巧汇总:提高PHP性能的53个技巧 用单引号代替双引号来包含字符串,这样做会更快一些。因为PHP会在双引号包围的字符串中搜寻变量, 单引号则不会,注意:只有echo能这么做,它是一种可以把多个字符串当作参数的函数译注: PHP手册中说echo是语言结构,不是真正的函数,故把函数加上了双引号)。 1、如果能将类的方法定义成static,就尽量定义成static,它的速度会提升将近4倍
- Yii框架中CGridView的使用方法以及详细示例
dcj3sjt126com
yii
CGridView显示一个数据项的列表中的一个表。
表中的每一行代表一个数据项的数据,和一个列通常代表一个属性的物品(一些列可能对应于复杂的表达式的属性或静态文本)。 CGridView既支持排序和分页的数据项。排序和分页可以在AJAX模式或正常的页面请求。使用CGridView的一个好处是,当用户浏览器禁用JavaScript,排序和分页自动退化普通页面请求和仍然正常运行。
实例代码如下:
- Maven项目打包成可执行Jar文件
dyy_gusi
assembly
Maven项目打包成可执行Jar文件
在使用Maven完成项目以后,如果是需要打包成可执行的Jar文件,我们通过eclipse的导出很麻烦,还得指定入口文件的位置,还得说明依赖的jar包,既然都使用Maven了,很重要的一个目的就是让这些繁琐的操作简单。我们可以通过插件完成这项工作,使用assembly插件。具体使用方式如下:
1、在项目中加入插件的依赖:
<plugin>
- php常见错误
geeksun
PHP
1. kevent() reported that connect() failed (61: Connection refused) while connecting to upstream, client: 127.0.0.1, server: localhost, request: "GET / HTTP/1.1", upstream: "fastc
- 修改linux的用户名
hongtoushizi
linuxchange password
Change Linux Username
更改Linux用户名,需要修改4个系统的文件:
/etc/passwd
/etc/shadow
/etc/group
/etc/gshadow
古老/传统的方法是使用vi去直接修改,但是这有安全隐患(具体可自己搜一下),所以后来改成使用这些命令去代替:
vipw
vipw -s
vigr
vigr -s
具体的操作顺
- 第五章 常用Lua开发库1-redis、mysql、http客户端
jinnianshilongnian
nginxlua
对于开发来说需要有好的生态开发库来辅助我们快速开发,而Lua中也有大多数我们需要的第三方开发库如Redis、Memcached、Mysql、Http客户端、JSON、模板引擎等。
一些常见的Lua库可以在github上搜索,https://github.com/search?utf8=%E2%9C%93&q=lua+resty。
Redis客户端
lua-resty-r
- zkClient 监控机制实现
liyonghui160com
zkClient 监控机制实现
直接使用zk的api实现业务功能比较繁琐。因为要处理session loss,session expire等异常,在发生这些异常后进行重连。又因为ZK的watcher是一次性的,如果要基于wather实现发布/订阅模式,还要自己包装一下,将一次性订阅包装成持久订阅。另外如果要使用抽象级别更高的功能,比如分布式锁,leader选举
- 在Mysql 众多表中查找一个表名或者字段名的 SQL 语句
pda158
mysql
在Mysql 众多表中查找一个表名或者字段名的 SQL 语句:
方法一:SELECT table_name, column_name from information_schema.columns WHERE column_name LIKE 'Name';
方法二:SELECT column_name from information_schema.colum
- 程序员对英语的依赖
Smile.zeng
英语程序猿
1、程序员最基本的技能,至少要能写得出代码,当我们还在为建立类的时候思考用什么单词发牢骚的时候,英语与别人的差距就直接表现出来咯。
2、程序员最起码能认识开发工具里的英语单词,不然怎么知道使用这些开发工具。
3、进阶一点,就是能读懂别人的代码,有利于我们学习人家的思路和技术。
4、写的程序至少能有一定的可读性,至少要人别人能懂吧...
以上一些问题,充分说明了英语对程序猿的重要性。骚年
- Oracle学习笔记(8) 使用PLSQL编写触发器
vipbooks
oraclesql编程活动Access
时间过得真快啊,转眼就到了Oracle学习笔记的最后个章节了,通过前面七章的学习大家应该对Oracle编程有了一定了了解了吧,这东东如果一段时间不用很快就会忘记了,所以我会把自己学习过的东西做好详细的笔记,用到的时候可以随时查找,马上上手!希望这些笔记能对大家有些帮助!
这是第八章的学习笔记,学习完第七章的子程序和包之后