<?xml version="1.0" encoding="utf-8" ?><rss version="2.0"><channel><title><![CDATA[DABAI的博客]]></title><description><![CDATA[讲清楚了才是真的懂了]]></description><link>https://blog.youkuaiyun.com/weixin_37389821</link><language>zh-cn</language><generator>https://blog.youkuaiyun.com/</generator><copyright><![CDATA[Copyright &copy; weixin_37389821]]></copyright><item><title><![CDATA[Git  我记不住的一些命令]]></title><link>https://blog.youkuaiyun.com/weixin_37389821/article/details/107435791</link><guid>https://blog.youkuaiyun.com/weixin_37389821/article/details/107435791</guid><author>weixin_37389821</author><pubDate>Sun, 19 Jul 2020 00:23:40 +0800</pubDate><description><![CDATA[commit

git commit --amend
使用场景：已经commit了，又做了一些修改，这些修改与上一次commit所做的是同一任务，因此想作为同一个commit进行提交。
可以在将修改的文件add后，使用该命令，git会将这个修改与上一次commit的内容合并为同一个commit。

reset

git reset HEAD filename
使用场景：取消已经暂存的(add)的filename文件。

checkout

git checkout -- filename
使用场景：撤销对f]]></description><category></category></item><item><title><![CDATA[Swift Optional学习笔记]]></title><link>https://blog.youkuaiyun.com/weixin_37389821/article/details/106973764</link><guid>https://blog.youkuaiyun.com/weixin_37389821/article/details/106973764</guid><author>weixin_37389821</author><pubDate>Fri, 26 Jun 2020 20:37:40 +0800</pubDate><description><![CDATA[Optional（可选项）
声明方式：在变量类型后加 ?
两重含义：

这里有一个值，它等于x;
这里根本没有值

通过给可选变量赋值为nil，表示没有值。
Swift中，nil不是指针，它只是值缺失的一种特殊类型，任何类型的可选项都可以设置为nil，而不仅仅时对象类型。且只有可选项可以赋值为nil。


可选项展开


可选项是没法直接使用的，需要用 !展开之后才能使用（意思是我知道这个可选项有值）
let str: String? = "abc"
let count = str.count // err]]></description><category></category></item><item><title><![CDATA[关于UITableView UI与数据源不同步造成的Crash]]></title><link>https://blog.youkuaiyun.com/weixin_37389821/article/details/106961953</link><guid>https://blog.youkuaiyun.com/weixin_37389821/article/details/106961953</guid><author>weixin_37389821</author><pubDate>Thu, 25 Jun 2020 21:34:59 +0800</pubDate><description><![CDATA[当tableView数据源发生变换需要更新视图时，最直接的方式是直接调用reloadData方法，然而如果我们的tableView数据源巨大时，会造成很多不必要的方法调用。
例如有如下程序：

每当点击update时，会向tableView的数据源数组中增加两条数据，更新UI，如果我们直接调用reloadData来更新UI，会是的前面没有任何改变的4行也被刷新一遍，造成性能损失。
因此通常数据源中局部数据更新时我们会调用UITableView的以下几种方法：
- (void)beginUpdates;
- ]]></description><category></category></item><item><title><![CDATA[copy修饰NSArray strong修饰NSMutableArray]]></title><link>https://blog.youkuaiyun.com/weixin_37389821/article/details/106958975</link><guid>https://blog.youkuaiyun.com/weixin_37389821/article/details/106958975</guid><author>weixin_37389821</author><pubDate>Thu, 25 Jun 2020 17:34:36 +0800</pubDate><description><![CDATA[strong与copy修饰符

strong修饰的属性，对该属性赋值时发生指针拷贝，即浅拷贝；
copy修饰的属性，对该属性赋值时发生内容拷贝，即深拷贝。（存在特殊Case）


通过重写对象的setter方法实现。


当将不可变对象赋值给copy修饰的不可变对象时，也是发生浅拷贝。这算是一种优化，验证见下文。

对数组而言，浅拷贝即拷贝了指向数组的指针；深拷贝即拷贝了数组中存储的内容，而这个深拷贝是通过调用copy方法实现。
copy与mutableCopy方法
以下代码发生崩溃，为什么？
@prope]]></description><category></category></item><item><title><![CDATA[iOS APP间跳转]]></title><link>https://blog.youkuaiyun.com/weixin_37389821/article/details/106870391</link><guid>https://blog.youkuaiyun.com/weixin_37389821/article/details/106870391</guid><author>weixin_37389821</author><pubDate>Sat, 20 Jun 2020 16:04:03 +0800</pubDate><description><![CDATA[App间跳转常见场景如第三方登录，例如饿了么使用支付宝登录，我们需要从饿了么App跳转至支付宝App进行授权。
常用的实现App间跳转方式有以下两种：


URL Scheme


Universal Link



]]></description><category></category></item><item><title><![CDATA[iOS KVO实现]]></title><link>https://blog.youkuaiyun.com/weixin_37389821/article/details/106062234</link><guid>https://blog.youkuaiyun.com/weixin_37389821/article/details/106062234</guid><author>weixin_37389821</author><pubDate>Mon, 11 May 2020 21:30:33 +0800</pubDate><description><![CDATA[KVO全称Key-Value Observing，可用于监听某个对象属性值的变化。
KVO底层实现原理
参考自：https://juejin.im/post/5adab70cf265da0b736d37a8
KVO底层怎么实现，当被观察对象的属性值发生变化时，由谁来调用我们实现的observeValueForKeyPath方法？
在修改属性值时一定会去调用该属性对应的setter方法，通过实现子类重写对应的setter方法，在setter方法中处理对observeValueForKeyPath方法的调用。
]]></description><category></category></item><item><title><![CDATA[C++多态]]></title><link>https://blog.youkuaiyun.com/weixin_37389821/article/details/88784802</link><guid>https://blog.youkuaiyun.com/weixin_37389821/article/details/88784802</guid><author>weixin_37389821</author><pubDate>Sat, 30 Mar 2019 21:58:43 +0800</pubDate><description><![CDATA[1.多态的概念
2.多态的定义及实现
2.1构成多态的条件
2.2重载、重写、重定义的对比
接口继承·实现继承
抽象类
C++11 override final
多态的原理，虚函数表
动态绑定，静态绑定
单、多继承的虚函数表的组成，生成方式]]></description><category></category></item><item><title><![CDATA[C++序列化容器（vector）中迭代化失效问题]]></title><link>https://blog.youkuaiyun.com/weixin_37389821/article/details/88011291</link><guid>https://blog.youkuaiyun.com/weixin_37389821/article/details/88011291</guid><author>weixin_37389821</author><pubDate>Thu, 28 Feb 2019 09:15:39 +0800</pubDate><description><![CDATA[insert导致的迭代器失效


void vector_test()
{
	vector&amp;lt;int&amp;gt; v1;
	v1.push_back(1);
	v1.push_back(2);
	v1.push_back(3);

	vector&amp;lt;int&amp;gt;::iterator pos = find(v1.begin(), v1.end(), 3); 
	v1.insert(pos, 4...]]></description><category></category></item><item><title><![CDATA[结构体内存对齐]]></title><link>https://blog.youkuaiyun.com/weixin_37389821/article/details/83962767</link><guid>https://blog.youkuaiyun.com/weixin_37389821/article/details/83962767</guid><author>weixin_37389821</author><pubDate>Sun, 11 Nov 2018 21:29:41 +0800</pubDate><description><![CDATA[结构体内存对齐  计算结构体的大小
结构体s1, s2:
struct s1
{
	char c1;
	int i;
	char c2;
};
struct s2
{
	char c1;
	char c2;
	int i;
};
int main()
{
	printf(&quot;%d\n&quot;, sizeof(struct s1));
	printf(&quot;%d\n&quot;, sizeof(struct s2));
...]]></description><category></category></item><item><title><![CDATA[一道指针笔试题]]></title><link>https://blog.youkuaiyun.com/weixin_37389821/article/details/83928909</link><guid>https://blog.youkuaiyun.com/weixin_37389821/article/details/83928909</guid><author>weixin_37389821</author><pubDate>Sat, 10 Nov 2018 13:46:52 +0800</pubDate><description><![CDATA[就是他
int main()
{
	char *c[] = { &amp;quot;ENTER&amp;quot;, &amp;quot;NEW&amp;quot;, &amp;quot;POINT&amp;quot;, &amp;quot;FIRST&amp;quot; };
	char**cp[] = { c + 3, c + 2, c + 1, c };
	char***cpp = cp;
	printf(&amp;quot;%s\n&amp;quot;, **++cpp);
	printf(&amp]]></description><category></category></item><item><title><![CDATA[C语言指针]]></title><link>https://blog.youkuaiyun.com/weixin_37389821/article/details/83756456</link><guid>https://blog.youkuaiyun.com/weixin_37389821/article/details/83756456</guid><author>weixin_37389821</author><pubDate>Thu, 08 Nov 2018 21:08:38 +0800</pubDate><description><![CDATA[1.指针是一个变量，用来存放地址，一个地址标记唯一一块内存空间；
2.指针的大小是固定的，4/8个字节（32/64位机）；
3.指针是有类型的，指针的类型决定了指针±整数的步长（跨几个字节），以及指针解引用时可访问的内存空间（几个字节）；
字符指针
字符指针的两种用法：
1.指向某个字符变量；
2.指向某个字符串首字符的地址。
面试题：
int main()
{
	char str1[] = &amp;quot;h...]]></description><category></category></item><item><title><![CDATA[数据的存储]]></title><link>https://blog.youkuaiyun.com/weixin_37389821/article/details/83684674</link><guid>https://blog.youkuaiyun.com/weixin_37389821/article/details/83684674</guid><author>weixin_37389821</author><pubDate>Sat, 03 Nov 2018 14:54:55 +0800</pubDate><description><![CDATA[大小端

大端存储模式：数据的低位字节序内容保存在内存的高地址中，数据的高位字节序内容保存在内存的低地址中


小端存储模式：数据的低位字节序内容保存在内存的低地址中，数据的高位字节序内容保存在内存的高地址中



百度2015系统工程师笔试题
请简述大端字节序和小端字节序的概念，设计一个小程序来判断当前机器的字节序。（10分）

//int check_sys()
//{
//	int a = ...]]></description><category></category></item><item><title><![CDATA[内存空间分配某面试题]]></title><link>https://blog.youkuaiyun.com/weixin_37389821/article/details/83479241</link><guid>https://blog.youkuaiyun.com/weixin_37389821/article/details/83479241</guid><author>weixin_37389821</author><pubDate>Mon, 29 Oct 2018 08:03:56 +0800</pubDate><description><![CDATA[
以下代码在VS中运行结果是什么？为什么？

	int main()
	{
		//局部变量
		//栈区
		int arr[10] = {1,2,3,4,5,6,7,8,9,10};
		int i = 0;
	
		for(i=0; i&amp;amp;lt;12; i++)
		{
			printf(&amp;quot;hehe\n&amp;quot;);
			arr[i] = 0;
		}
		return 0;
	}

死循环打印h...]]></description><category></category></item><item><title><![CDATA[C语言操作符]]></title><link>https://blog.youkuaiyun.com/weixin_37389821/article/details/83245012</link><guid>https://blog.youkuaiyun.com/weixin_37389821/article/details/83245012</guid><author>weixin_37389821</author><pubDate>Mon, 22 Oct 2018 16:36:07 +0800</pubDate><description><![CDATA[C语言操作符算数操作符移位操作符新的改变功能快捷键合理的创建标题，有助于目录的生成如何改变文本的样式插入链接与图片如何插入一段漂亮的代码片生成一个适合你的列表创建一个表格设定内容居中、居左、居右SmartyPants创建一个自定义列表如何创建一个注脚注释也是必不可少的KaTeX数学公式新的甘特图功能，丰富你的文章UML 图表FLowchart流程图导出与导入导出导入
算数操作符
1.%不可以作用于...]]></description><category></category></item></channel></rss>