<?xml version="1.0" encoding="utf-8" ?><rss version="2.0"><channel><title><![CDATA[qq_36308972的博客]]></title><description><![CDATA[]]></description><link>https://blog.csdn.net/qq_36308972</link><language>zh-cn</language><generator>https://blog.csdn.net/</generator><copyright><![CDATA[Copyright &copy; qq_36308972]]></copyright><item><title><![CDATA[【iOS】UserDefaults使用的一些“坑”]]></title><link>https://blog.csdn.net/qq_36308972/article/details/117831115</link><guid>https://blog.csdn.net/qq_36308972/article/details/117831115</guid><author>qq_36308972</author><pubDate>Sat, 12 Jun 2021 03:01:35 +0800</pubDate><description><![CDATA[UserDefaults使用的一些“坑”项目场景：问题1:问题描述：原因分析：问题2：问题描述：原因分析：问题3:问题描述：原因分析：方案一：方案二：问题4:问题描述：原因分析：

个人理解，有错误欢迎评论指正，感谢????

项目场景：
iOS 主进程与extension进程通信，并且需要主进程可以实时监听到状态变化
UserDefaults是线程安全的
 
问题1:
问题描述：
初始化程序组对应UserDefaults失败
原因分析：
group ID未创建成功

问题2：
问题描述：
没有记录数据的时]]></description><category></category></item><item><title><![CDATA[【ios】swift调起系统分享面板]]></title><link>https://blog.csdn.net/qq_36308972/article/details/107158216</link><guid>https://blog.csdn.net/qq_36308972/article/details/107158216</guid><author>qq_36308972</author><pubDate>Mon, 06 Jul 2020 14:34:57 +0800</pubDate><description><![CDATA[单纯调用起系统的分享面板还是比较简单的，系统有提供一个很好用的类（UIActivityViewController）可以用来处理这一点
    @objc func share(){
        DispatchQueue.main.async {
            let activityController = UIActivityViewController(activityItems: [URL(fileURLWithPath: "http://www.baidu.com")], appl]]></description><category></category></item><item><title><![CDATA[【ios】UI -- 滚动效果的实现原理]]></title><link>https://blog.csdn.net/qq_36308972/article/details/106931199</link><guid>https://blog.csdn.net/qq_36308972/article/details/106931199</guid><author>qq_36308972</author><pubDate>Tue, 23 Jun 2020 20:37:59 +0800</pubDate><description><![CDATA[在UI中，会有很多视图具有可滚动属性，包括但不限于UICollectionView、UITableView等
它们的滚动原理基本相同，下面进行一个初学者的简单理解

它的滚动的实现依赖于两个属性：View的frame和bounds

frame：视图的位置
bounds：视图的大小

滚动效果可以简单理解为：当子view超出其bounds的时候，超出的部分在显示时将被“丢弃”，而通过拖动view或滚动轴，可以改变其frame，使其在界面上的相对位置发生变化（也就是它在bounds中的位置变化），从而使vi.]]></description><category></category></item><item><title><![CDATA[【ios】多线程编程基础 -- GCD]]></title><link>https://blog.csdn.net/qq_36308972/article/details/106917858</link><guid>https://blog.csdn.net/qq_36308972/article/details/106917858</guid><author>qq_36308972</author><pubDate>Tue, 23 Jun 2020 14:37:15 +0800</pubDate><description><![CDATA[基础
首先推荐一篇比较简单易懂的多线程编程与异步的基础介绍，可以对ios的多线程有个简单的了解：https://juejin.im/post/5a309c525188255ea95befef
官方文档（个人感觉不适合零基础的同学，建议还是先把基础刷一下，然后动手写写再看）：线程编程指南：https://developer.apple.com/library/archive/documentation/Cocoa/Conceptual/Multithreading/ThreadSafety/ThreadSaf]]></description><category></category></item><item><title><![CDATA[【ios】如何导入第三方Pod]]></title><link>https://blog.csdn.net/qq_36308972/article/details/106615849</link><guid>https://blog.csdn.net/qq_36308972/article/details/106615849</guid><author>qq_36308972</author><pubDate>Mon, 08 Jun 2020 11:50:32 +0800</pubDate><description><![CDATA[以SnapKit为例
前提：已安装Pod


首先，控制台命令进入到你的工程目录下
执行： pod init ，这一步，会在工程主目录生成Podfile文件
修改Podfile文件，在target ‘demo’ do 和 end之间，添加依赖的第三方库，如：pod ‘SnapKit’, ‘~&gt; 5.0.0’
执行命令：pod Install，这一步会在工程主目录下生成Podfile.lck文件，它管理Pod的版本等
然后重新打开主工程目录下的.xcworkspace文件，会看到新添加的Pod相关信息.]]></description><category></category></item><item><title><![CDATA[【VM】Win10虚拟机安装Mac OS]]></title><link>https://blog.csdn.net/qq_36308972/article/details/105461056</link><guid>https://blog.csdn.net/qq_36308972/article/details/105461056</guid><author>qq_36308972</author><pubDate>Sat, 11 Apr 2020 22:33:54 +0800</pubDate><description><![CDATA[一、 资源
VM：https://download3.vmware.com/software/wkst/file/VMware-workstation-full-15.1.0-13591040.exe
（版本不能高，一旦高了就可能解锁失败，被坑了略久）
Mac Os：
解锁工具：
链接：https://pan.baidu.com/s/1o9GDWeOU88Fk67asOjXcUw
提取码：goh6...]]></description><category></category></item><item><title><![CDATA[【网络】TCP/IP协议]]></title><link>https://blog.csdn.net/qq_36308972/article/details/105135794</link><guid>https://blog.csdn.net/qq_36308972/article/details/105135794</guid><author>qq_36308972</author><pubDate>Sat, 28 Mar 2020 14:18:50 +0800</pubDate><description><![CDATA[TCP/IP协议序协议分组交换协议协议分层OSI参考模型TCP/IP模型TCP/IP是怎么通信的？TCP/IP
序


协议
简单来说，协议就是计算机之间通过网络实现通信时，实现达成的一种"约定"；这种"约定"使得不同厂商的设备、不同CPU及不同操作系统组成的计算机之间，只要遵循相同的协议就可以实现通信。
分组交换协议
将大数据分割为一个个较小单位（包packet）进行传输。

计算机通信会在每一...]]></description><category></category></item><item><title><![CDATA[【WinDbg】使用WinDbg调试程序（本机调试32应用程序）]]></title><link>https://blog.csdn.net/qq_36308972/article/details/105122327</link><guid>https://blog.csdn.net/qq_36308972/article/details/105122327</guid><author>qq_36308972</author><pubDate>Thu, 26 Mar 2020 18:16:57 +0800</pubDate><description><![CDATA[用WinDbg调试

File-&gt;OpenExecutable，打开要调试的程序（可以附加命令行）
在windbg窗口底部附近的命令行中，输入以下命令：.sympath srv* 或 在File-&gt;Symbol File Path输入符号所在路径;符号路径添加后，可以调用.reload加载符号（符号相关其他命令：https://www.cnblogs.com/yilang/p/1146...]]></description><category></category></item><item><title><![CDATA[【WinDbg】WinDbg的命令]]></title><link>https://blog.csdn.net/qq_36308972/article/details/105120410</link><guid>https://blog.csdn.net/qq_36308972/article/details/105120410</guid><author>qq_36308972</author><pubDate>Thu, 26 Mar 2020 16:01:36 +0800</pubDate><description><![CDATA[一、 WinDbg命令
WinDbg共支持三类命令：标准命令、元命令和扩展命令
1. 标准命令
标准命令（standard command）用来提供适用于所有调试目标的基本调试功能.标准命令通常是一两个字符（version除外）或者符号，只有version等少数命令除外。标准命令的第一个字符是不分大小写的, 第二个字符可能区分大小写。所有标准命令都是实现在WinDBG内部的, 执行这些命令时不需要...]]></description><category></category></item><item><title><![CDATA[【WinDbg】WinDbg配置及介绍]]></title><link>https://blog.csdn.net/qq_36308972/article/details/105113710</link><guid>https://blog.csdn.net/qq_36308972/article/details/105113710</guid><author>qq_36308972</author><pubDate>Thu, 26 Mar 2020 11:53:45 +0800</pubDate><description><![CDATA[一、 安装及配置
https://www.cnblogs.com/yilang/p/11383369.html
二、 界面介绍 及 界面化使用
https://www.cnblogs.com/yilang/p/11387359.html
https://www.cnblogs.com/yilang/p/11388444.html
https://www.cnblogs.com/yilang/p/1...]]></description><category></category></item><item><title><![CDATA[【windows】会话（Session）、窗口站（WindowsStation）、桌面、窗口]]></title><link>https://blog.csdn.net/qq_36308972/article/details/104969126</link><guid>https://blog.csdn.net/qq_36308972/article/details/104969126</guid><author>qq_36308972</author><pubDate>Wed, 25 Mar 2020 14:54:22 +0800</pubDate><description><![CDATA[Windows Session序会话管理器Windows会话过程终端服务会话（Terminal Services Session）创建过程身份认证过程会话会话的组成
序
 一个系统可以同时登录多个用户(包括远程用户登录)
一个用户拥有一个会话（远程用户被称为远程会话）
一个会话拥有多个工作站和窗口。只能拥有一个交互式工作站(Winsta0)。
一个会话拥有一系列私有的进程和模块：Csrss.exe...]]></description><category></category></item><item><title><![CDATA[【SQLite】SQLite教程笔记（二）]]></title><link>https://blog.csdn.net/qq_36308972/article/details/103053344</link><guid>https://blog.csdn.net/qq_36308972/article/details/103053344</guid><author>qq_36308972</author><pubDate>Sun, 12 Jan 2020 19:41:47 +0800</pubDate><description><![CDATA[SQLite教程笔记（二）SQLite Join交叉连接 -- CROSS JOIN内连接 -- INNER JOIN外连接 -- OUTER JOIN
SQLite Join
交叉连接 – CROSS JOIN
交叉连接（CROSS JOIN）把第一个表的每一行与第二个表的每一行进行匹配。如果两个输入表分别有 x 和 y 行，则结果表有 x*y 行。由于交叉连接（CROSS JOIN）有可能产生...]]></description><category></category></item><item><title><![CDATA[【软件设计师】第7章 数据库技术基础]]></title><link>https://blog.csdn.net/qq_36308972/article/details/103898768</link><guid>https://blog.csdn.net/qq_36308972/article/details/103898768</guid><author>qq_36308972</author><pubDate>Sun, 12 Jan 2020 19:41:13 +0800</pubDate><description><![CDATA[数据库概念
数据库是长期存储在计算机内的、有组织的、可共享的数据集合。其特点是数据间联系密切、冗余度小、独立性较高、易扩展，并且可为各类用户共享。
数据库系统（DBS） 是一个采用了数据库技术，有组织地、动态地存储大量相关数据，方便多用户访问的计算机系统。广义上讲，DBS是由数据库、硬件、软件和人员组成的。
数据库管理系统（DBMS） 是数据库系统的核心软件，要在操作系统下支持下工作，解决如何科学...]]></description><category></category></item><item><title><![CDATA[GitHub使用]]></title><link>https://blog.csdn.net/qq_36308972/article/details/103810559</link><guid>https://blog.csdn.net/qq_36308972/article/details/103810559</guid><author>qq_36308972</author><pubDate>Thu, 02 Jan 2020 20:26:51 +0800</pubDate><description><![CDATA[GitHub使用git上传大文件git 私有仓库添加用户协作（添加权限）
git上传大文件
当必须上传大文件时。需借助git-fls
下载地址：https://git-lfs.github.com/
使用方式：

　　　　（1）、在项目目录git lfs install。
　　　　（2）、git lfs track '.文件后缀'。
　　　　（3）、git add .gitattributes。
...]]></description><category></category></item><item><title><![CDATA[【SQLite】SQLite教程笔记（一）]]></title><link>https://blog.csdn.net/qq_36308972/article/details/103029267</link><guid>https://blog.csdn.net/qq_36308972/article/details/103029267</guid><author>qq_36308972</author><pubDate>Wed, 13 Nov 2019 16:55:03 +0800</pubDate><description><![CDATA[SQLite教程笔记（一）SQLite命令DDL -- 数据定义语言DML -- 数据操作语言DQL -- 数据查询语言SQLite语法SQLite语句ANALYZE语句AND/OR子句ALTER TABLE语句ATTACH DATABASE语句BEGIN TRANSACTION语句BETWEEN子句COMMIT语句CREATE INDEX语句CREATE TABLE语句CREATE TRIGGE...]]></description><category></category></item><item><title><![CDATA[【转】关系数据库与非关系数据库]]></title><link>https://blog.csdn.net/qq_36308972/article/details/103023609</link><guid>https://blog.csdn.net/qq_36308972/article/details/103023609</guid><author>qq_36308972</author><pubDate>Tue, 12 Nov 2019 10:23:28 +0800</pubDate><description><![CDATA[转自：https://www.cnblogs.com/suncan0/p/4735129.html
1. 关系型数据库
关系型数据库，是指采用了关系模型来组织数据的数据库。
关系模型是在1970年由IBM的研究员E.F.Codd博士首先提出的，在之后的几十年中，关系模型的概念得到了充分的发展并逐渐成为主流数据库结构的主流模型。
简单来说，关系模型指的就是二维表格模型，而一个关系型数据库就是由二维表...]]></description><category></category></item><item><title><![CDATA[【算法】深度优先和广度优先]]></title><link>https://blog.csdn.net/qq_36308972/article/details/102460463</link><guid>https://blog.csdn.net/qq_36308972/article/details/102460463</guid><author>qq_36308972</author><pubDate>Wed, 09 Oct 2019 14:50:59 +0800</pubDate><description><![CDATA[图的遍历
以图中的某一个顶点出发遍历图中其余顶点，且使每一个顶点仅被访问一次，这一过程就叫做图的遍历
深度优先遍历

有点类似于树的前序遍历

算法逻辑：

从图中的某个顶点v出发，访问v
找到刚访问过的顶点的第一个未被访问的邻接点，访问该顶点。以该顶点为新顶点，重复此步骤，直至刚访问的顶点没有未被访问的邻接点为止
返回前一个访问过的且有未被访问的邻接点的顶点，找到该顶点的下一个未被访问的邻接点，...]]></description><category></category></item><item><title><![CDATA[【Linux设备驱动程序】构造和运行模块]]></title><link>https://blog.csdn.net/qq_36308972/article/details/100982952</link><guid>https://blog.csdn.net/qq_36308972/article/details/100982952</guid><author>qq_36308972</author><pubDate>Fri, 20 Sep 2019 11:43:02 +0800</pubDate><description><![CDATA[Linux设备驱动程序 -- 构造和运行模块内核模块与应用程序的不同用户空间和内核空间内核中的并发为什么要考虑并发问题Linux内核代码要求内核代码的当前进程需要注意的其他细节编译和装载编译模块装载和卸载模块装载insmodrmmodlsmod预备知识头文件
内核模块与应用程序的不同





内核模块
应用程序




任务
大多数小规模及中规模的应用程序是从头到尾执行单个任务
模块只是先注册自...]]></description><category></category></item><item><title><![CDATA[【Linux设备驱动程序】基础简介]]></title><link>https://blog.csdn.net/qq_36308972/article/details/100880882</link><guid>https://blog.csdn.net/qq_36308972/article/details/100880882</guid><author>qq_36308972</author><pubDate>Tue, 17 Sep 2019 19:31:54 +0800</pubDate><description><![CDATA[Linux设备驱动程序设备驱动程序的作用内核功能划分进程管理内存管理文件系统设备控制网络功能可装载模块设备和模块的分类字符设备块设备网络设备安全问题几个原则性的概念
设备驱动程序的作用


设备驱动的作用在于提供机制，而不是提供策略。
1） 机制和策略分离的好处是啥？
可以使软件包更易开发，也更容易根据不同的需求来调整以实现不同的策略。
2） 机制是啥？
机制是类似于提供什么样的功能。
3） 策略...]]></description><category></category></item><item><title><![CDATA[Windows的验证机制]]></title><link>https://blog.csdn.net/qq_36308972/article/details/99960777</link><guid>https://blog.csdn.net/qq_36308972/article/details/99960777</guid><author>qq_36308972</author><pubDate>Mon, 16 Sep 2019 10:45:36 +0800</pubDate><description><![CDATA[软件调试的主要任务是寻找软件下次的根源，其前提通常是已经知道了有瑕疵存在。
发现软件瑕疵
发现软件下次的最普遍方法是测试。常见的测试手段有：

黑盒测试
百合测试
内建自检，又称为BIST（Build-In Self-Test），是指在软件代码内部构建一些测试功能，这些功能（函数）可以在某些情况下执行，或者被自动测试工具所调用以发现问题。
压力测试
即使用了以上所有的测试手段，也不能保证会发现所有...]]></description><category></category></item></channel></rss>