<?xml version="1.0" encoding="utf-8" ?><rss version="2.0"><channel><title><![CDATA[csndwata]]></title><description><![CDATA[]]></description><link>https://blog.youkuaiyun.com/csndwata</link><language>zh-cn</language><generator>https://blog.youkuaiyun.com/</generator><copyright><![CDATA[Copyright &copy; csndwata]]></copyright><item><title><![CDATA[20210906 - 底层技术 - 注解与注解处理器]]></title><link>https://blog.youkuaiyun.com/csndwata/article/details/121168783</link><guid>https://blog.youkuaiyun.com/csndwata/article/details/121168783</guid><author>csndwata</author><pubDate>Fri, 05 Nov 2021 18:51:58 +0800</pubDate><description><![CDATA[20210906 - 底层技术 - 注解与注解处理器
注解语法
/**
 * 注解，单独是没有意义的。如下是具体应用场景：
 *
 * 注解+APT：					 用于生成一些java文件，如：butterknife, dagger2, hilt, databinding
 * 注解+代码埋点：			  AspactJ, ARouter
 * 注解+反射+动态代理：	 XUtils, Lifecycle
 */
@Target({ElementType.FIELD, ElementType.METHOD})/]]></description><category></category></item><item><title><![CDATA[20210705 - 架构 - IOC-Hilt实现原理]]></title><link>https://blog.youkuaiyun.com/csndwata/article/details/121168767</link><guid>https://blog.youkuaiyun.com/csndwata/article/details/121168767</guid><author>csndwata</author><pubDate>Fri, 05 Nov 2021 18:50:18 +0800</pubDate><description><![CDATA[20210705 - 架构 - IOC-Hilt实现原理

Hilt就是Android团队联系了Dagger2团队，一起开发出来的一个专门面向Android的依赖注入框架。
相比于Dagger2，Hilt最明显的特征就是：1. 简单。2. 提供了Android专属的API。

网络隔离层设计

静态代理

1、回调接口设计
public interface ICallback {
    void onSuccess(String result);
    void onFailure(String e);]]></description><category></category></item><item><title><![CDATA[20210703 - 架构 - IOC注入神器dagger2详解]]></title><link>https://blog.youkuaiyun.com/csndwata/article/details/120223664</link><guid>https://blog.youkuaiyun.com/csndwata/article/details/120223664</guid><author>csndwata</author><pubDate>Fri, 10 Sep 2021 15:46:15 +0800</pubDate><description><![CDATA[IOC注入神器dagger2详解

IOC（Inversion of Control）
是原来由程序代码中主动获取的资源，转变由第三方获取并使原来的代码被动接收的方式，以达到解耦的效果，称为控制反转

基本配置
implementation 'com.google.dagger:dagger:2.4'
annotationProcessor 'com.google.dagger:dagger-compiler:2.4'

使用逻辑


module: 用于提供对象


component: 用于组织modu]]></description><category></category></item><item><title><![CDATA[20210702 - 架构 - IOC动态代理实现原理]]></title><link>https://blog.youkuaiyun.com/csndwata/article/details/120080280</link><guid>https://blog.youkuaiyun.com/csndwata/article/details/120080280</guid><author>csndwata</author><pubDate>Fri, 03 Sep 2021 13:57:24 +0800</pubDate><description><![CDATA[动态代理
1、生成代理类class
public interface HelloInterface {
    void sayHello();
}

public static void main(String[] args) throws  Exception {
    // 生成一个class二进制文件
    byte[] bytes = ProxyGenerator.generateProxyClass("DavidHelloImpl", new Class[]{HelloInterface.c]]></description><category></category></item><item><title><![CDATA[源码分析Handler机制]]></title><link>https://blog.youkuaiyun.com/csndwata/article/details/71124551</link><guid>https://blog.youkuaiyun.com/csndwata/article/details/71124551</guid><author>csndwata</author><pubDate>Wed, 03 May 2017 16:02:44 +0800</pubDate><description><![CDATA[Handler机制
Message（消息） 
消息的创建： 
调用Message.obtain()方法，当sPool消息池为空就创建消息对象
消息的next属性： 
消息对象通过next属性指向下一个消息对象
消息的when属性： 
long类型变量when，记录自己发送时间
消息的target成员变量： 
消息对象中有一个Handler类型的成员变量target
这个target记录此消息对象是由]]></description><category></category></item><item><title><![CDATA[Xcode8 pod install 报错 “Generating Pods project Abort trap]]></title><link>https://blog.youkuaiyun.com/csndwata/article/details/64457396</link><guid>https://blog.youkuaiyun.com/csndwata/article/details/64457396</guid><author>csndwata</author><pubDate>Tue, 21 Mar 2017 18:01:10 +0800</pubDate><description><![CDATA[今天在写一个新项目的时候，使用cocoapods在执行 $ pod install 的时候，终端提示 Generating
 Pods project Abort trap: 6

解决办法：

删除所有cocoapods gems，

依次执行以下命令：
sudo gem uninstall cocoapods
sudo gem uninstall cocoapods-core
]]></description><category></category></item><item><title><![CDATA[Markdown语法]]></title><link>https://blog.youkuaiyun.com/csndwata/article/details/53285758</link><guid>https://blog.youkuaiyun.com/csndwata/article/details/53285758</guid><author>csndwata</author><pubDate>Tue, 22 Nov 2016 14:42:15 +0800</pubDate><description><![CDATA[#Markdown语法
##链接
网址链接：   
联系方式：   
资源链接： [github咖啡杯图片](./1_csndwata.jpg.png/ "快点开链接～")


##图片


###网络图片
![猫咪](http://img5.imgtn.bdimg.com/it/u=652369314,4128174801&fm=21&gp=0.jpg "来自百度图片") ]]></description><category></category></item><item><title><![CDATA[线程（Thread）]]></title><link>https://blog.youkuaiyun.com/csndwata/article/details/53233257</link><guid>https://blog.youkuaiyun.com/csndwata/article/details/53233257</guid><author>csndwata</author><pubDate>Sat, 19 Nov 2016 19:17:08 +0800</pubDate><description><![CDATA[线程（Thread）线程创建方式：方式一：继承Thread
自定义一个类继承Thread类。
重写Thread的run方法，把自定义线程的任务代码定义在run方法上。
创建Thread子类的对象，并且调用start方法启动一个线程。class MyThread extends Thread {    String data;    public MyThread(String data) {]]></description><category></category></item><item><title><![CDATA[输入输出流（IO）]]></title><link>https://blog.youkuaiyun.com/csndwata/article/details/53214252</link><guid>https://blog.youkuaiyun.com/csndwata/article/details/53214252</guid><author>csndwata</author><pubDate>Fri, 18 Nov 2016 11:17:03 +0800</pubDate><description><![CDATA[输入输出流（IO）字节流
InputStream，所有输入字节流的基类，抽象类 
FileInputStream，读取文件的输入字节流
BUfferedInputStream，缓冲输入字节流，该类内部维护了一个 8kb 的字节数组，该类的出现是为了提高读取数据的效率
OutputStream，所有输出字节流的基类，抽象类 
FileOutputStream，向文件输出字节数据
BufferedOut]]></description><category></category></item><item><title><![CDATA[泛型（genericity）]]></title><link>https://blog.youkuaiyun.com/csndwata/article/details/53199613</link><guid>https://blog.youkuaiyun.com/csndwata/article/details/53199613</guid><author>csndwata</author><pubDate>Thu, 17 Nov 2016 14:34:02 +0800</pubDate><description><![CDATA[范型自定义范型方法自定义范型方法格式：修饰符 <声明自定义泛型>返回值类型  函数名(形参列表..){}
注意事项：
自定义范型方法的数据类型是在调用该方法时传入实参时确定的
自定义范型使用的标识符  
例子：  //需求：定义一个函数，实现可以接受任意类型的行参，要求返回类型与实参类型保持一致
public class Demo {
    public static void main(Stri]]></description><category></category></item><item><title><![CDATA[集合]]></title><link>https://blog.youkuaiyun.com/csndwata/article/details/53189398</link><guid>https://blog.youkuaiyun.com/csndwata/article/details/53189398</guid><author>csndwata</author><pubDate>Wed, 16 Nov 2016 17:59:59 +0800</pubDate><description><![CDATA[集合集合API简介
collection接口 
List接口。特点：有序，可重复 
ArrayList类，Object数组实现的。特点：查询快，增删慢
LinkList类，链表数据结构实现的。特点：查询慢，增删快
Vector类，Object数组实现的。特点：查询快，增删慢，线程安全的，操作效率低
Set接口。特点：无序，不可重复。Set.iterator()遍历 
HashSet类，哈希表实现。特]]></description><category></category></item><item><title><![CDATA[iOS10.0自带的刷新控件UIRefreshControl简介]]></title><link>https://blog.youkuaiyun.com/csndwata/article/details/53171737</link><guid>https://blog.youkuaiyun.com/csndwata/article/details/53171737</guid><author>csndwata</author><pubDate>Tue, 15 Nov 2016 15:23:15 +0800</pubDate><description><![CDATA[iOS10.0自带的刷新控件UIRefreshControl简介 @available(iOS 10.0, *)
open var refreshControl: UIRefreshControl?
–    class ViewController: UIViewController {    var scrollView: UIScrollView?
    override func view]]></description><category></category></item><item><title><![CDATA[CocoaPods安装]]></title><link>https://blog.youkuaiyun.com/csndwata/article/details/52945182</link><guid>https://blog.youkuaiyun.com/csndwata/article/details/52945182</guid><author>csndwata</author><pubDate>Thu, 27 Oct 2016 14:00:29 +0800</pubDate><description><![CDATA[CocoaPods安装安装参考:
  http:\/\/blog.youkuaiyun.com\/showhilllee\/article\/details\/38398119
  
  http:\/\/blog.youkuaiyun.com\/gf771115\/article\/details\/50540398
  
  http:\/\/www.cnblogs.com\/yan520\/p\/5583362.ht]]></description><category></category></item><item><title><![CDATA[property介绍]]></title><link>https://blog.youkuaiyun.com/csndwata/article/details/52180715</link><guid>https://blog.youkuaiyun.com/csndwata/article/details/52180715</guid><author>csndwata</author><pubDate>Thu, 11 Aug 2016 11:03:43 +0800</pubDate><description><![CDATA[property介绍对象用strong（强指针）或者weak（弱指针）数据类型用assign（基本）或者copy（NSString）MRC环境下：
  属性
  说明  atomic
  原子性，对线程加锁，性能低，安全性高
  nonatomic
  非原子性，不对线程加锁，性能高，低安全性
  retain
  用于对象类型（帮生成set方法的内存管理）
  assign
  用于数据基本类型]]></description><category></category></item><item><title><![CDATA[栈,堆,静态区]]></title><link>https://blog.youkuaiyun.com/csndwata/article/details/51302735</link><guid>https://blog.youkuaiyun.com/csndwata/article/details/51302735</guid><author>csndwata</author><pubDate>Tue, 03 May 2016 10:46:10 +0800</pubDate><description><![CDATA[参考: http://blog.youkuaiyun.com/chenke1988/article/details/7273375
一个由C/C++编译的程序占用的内存分为以下几个部分 :
栈(stack) 
由编译器自动分配和释放, 存放局部变量, 函数参数
堆(heap) 
一般由程序员分配和释放, 若程序员没有释放, 程序结束时可能由OS回收
静态区(static)/全局区 
存储全局变量, 静态变量.]]></description><category></category></item><item><title><![CDATA[Android apk 混淆,加密,加壳 介绍]]></title><link>https://blog.youkuaiyun.com/csndwata/article/details/50978045</link><guid>https://blog.youkuaiyun.com/csndwata/article/details/50978045</guid><author>csndwata</author><pubDate>Fri, 25 Mar 2016 11:20:32 +0800</pubDate><description><![CDATA[Android apk 混淆/加密/加壳 介绍360加固服务: http://jiagu.360.cn/加壳介绍: http://blog.youkuaiyun.com/androidsecurity/article/details/8678399]]></description><category></category></item><item><title><![CDATA[SDK 里的各项内容说明]]></title><link>https://blog.youkuaiyun.com/csndwata/article/details/50962719</link><guid>https://blog.youkuaiyun.com/csndwata/article/details/50962719</guid><author>csndwata</author><pubDate>Wed, 23 Mar 2016 14:06:34 +0800</pubDate><description><![CDATA[------------------------------------------------------------------------------------------------------------------------------------





--------------------------------------------------------]]></description><category></category></item><item><title><![CDATA[查找和排序]]></title><link>https://blog.youkuaiyun.com/csndwata/article/details/50947989</link><guid>https://blog.youkuaiyun.com/csndwata/article/details/50947989</guid><author>csndwata</author><pubDate>Mon, 21 Mar 2016 17:03:28 +0800</pubDate><description><![CDATA[查找和排序折半查找//折半查找法1（String--compareTo方法）
public static int halfSearch(List<String> list, String key) {
    int max, min, mid;
    max = list.size() - 1;
    max = list.size() - 1;
    min = 0;    while (]]></description><category></category></item><item><title><![CDATA[重写重载 & 继承 & 封装]]></title><link>https://blog.youkuaiyun.com/csndwata/article/details/50947361</link><guid>https://blog.youkuaiyun.com/csndwata/article/details/50947361</guid><author>csndwata</author><pubDate>Mon, 21 Mar 2016 16:03:28 +0800</pubDate><description><![CDATA[重写重载 & 继承 & 封装重写, 重载什么是 重写/覆盖:
    当子类出现和父类一模一样的函数时，
    当子类对象调用该函数，会运行子类函数的内容。
    如同父类的函数被覆盖一样。    当子类继承父类，沿袭了父类的功能，到子类中，
    但是子类虽具备该功能，但是功能的内容却和父类不一致，
    这时，没有必要定义新功能，而是使用覆盖特殊，保留父类的功能定义，并重写功能内容。重写]]></description><category></category></item><item><title><![CDATA[多态]]></title><link>https://blog.youkuaiyun.com/csndwata/article/details/50947346</link><guid>https://blog.youkuaiyun.com/csndwata/article/details/50947346</guid><author>csndwata</author><pubDate>Mon, 21 Mar 2016 16:02:23 +0800</pubDate><description><![CDATA[多态概念1.多态的体现
    父类的引用指向了自己的子类对象。
    父类的引用也可以接收自己的子类对象。2.多态的前提
    必须是类与类之间有关系。要么继承，要么实现。
    通常还有一个前提：存在覆盖。3.多态的好处
    多态的出现大大的提高程序的扩展性。4.多态的弊端：
    虽然提高了扩展性，但是只能使用父类的引用访问父类中的成员。多态：
1.多态的概念发展出来，是以封装和继]]></description><category></category></item></channel></rss>