-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathsearch.xml
153 lines (143 loc) · 25.7 KB
/
search.xml
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
<?xml version="1.0" encoding="utf-8"?>
<search>
<entry>
<title><![CDATA[Mac 系统显示隐藏文件]]></title>
<url>http://ethanwanggg.github.io/2016/07/22/Mac-%E7%B3%BB%E7%BB%9F%E6%98%BE%E7%A4%BA%E9%9A%90%E8%97%8F%E6%96%87%E4%BB%B6/</url>
<content type="html"><![CDATA[<p>打开终端,输入:</p>
<figure class="highlight stylus"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">defaults write com<span class="selector-class">.apple</span><span class="selector-class">.finder</span> AppleShowAllFiles -bool true</span><br></pre></td></tr></table></figure>
<p>此命令显示隐藏文件</p>
<figure class="highlight stylus"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">defaults write com<span class="selector-class">.apple</span><span class="selector-class">.finder</span> AppleShowAllFiles -bool false</span><br></pre></td></tr></table></figure>
<p> 此命令关闭显示隐藏文件</p>
<p>命令运行之后需要重新加载Finder:快捷键option+command+esc,选中Finder,重新启动即可。也可以从左上角苹果图标选择强制退出>选中Finder,重新启动。</p>
]]></content>
</entry>
<entry>
<title><![CDATA[IOS Swift 使用 cocopods步骤]]></title>
<url>http://ethanwanggg.github.io/2016/07/21/IOS-Swift-%E4%BD%BF%E7%94%A8-cocopods%E6%AD%A5%E9%AA%A4/</url>
<content type="html"><![CDATA[<p>首先你要关掉Xcode,打开终端,用 cd 命令进入包含你项目的那个目录下:cd ~/Path/To/Folder/Containing/TestPeoject</p>
<p>接下来,输入下面的命令:</p>
<figure class="highlight plain"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">pod init</span><br></pre></td></tr></table></figure>
<p>这将为你的项目创建一个PodFile</p>
<p>输入下面的命令行打开PodFile,并使用Xcode进行编辑:</p>
<a id="more"></a>
<figure class="highlight plain"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">open -a Xcode Podfile</span><br></pre></td></tr></table></figure>
<p><strong>注意:</strong>你不能使用TextEdit来编辑Podfile,因为它有可能用图形化的更有吸引力的typeset quotes代替standard quotes,这可能导致CocoaPods不能理解并抛出错误,所以最好用Xcode或者别的编程文本编辑器来编辑你的Podfile。</p>
<p>默认的podFile看起来是这样的:</p>
<figure class="highlight elixir"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br><span class="line">13</span><br><span class="line">14</span><br><span class="line">15</span><br><span class="line">16</span><br><span class="line">17</span><br><span class="line">18</span><br><span class="line">19</span><br></pre></td><td class="code"><pre><span class="line"><span class="comment"># Uncomment this line to define a global platform for your project</span></span><br><span class="line"></span><br><span class="line"><span class="comment"># platform :ios, '8.0'</span></span><br><span class="line"></span><br><span class="line"><span class="comment"># Uncomment this line if you're using Swift</span></span><br><span class="line"></span><br><span class="line"><span class="comment"># use_frameworks!</span></span><br><span class="line"></span><br><span class="line">target <span class="string">'TestPeoject'</span> <span class="keyword">do</span></span><br><span class="line"></span><br><span class="line"><span class="keyword">end</span></span><br><span class="line"></span><br><span class="line">target <span class="string">'TestPeojectTests'</span> <span class="keyword">do</span></span><br><span class="line"></span><br><span class="line"><span class="keyword">end</span></span><br><span class="line"></span><br><span class="line">target <span class="string">'TestPeojectUITests'</span> <span class="keyword">do</span></span><br><span class="line"></span><br><span class="line"><span class="keyword">end</span></span><br></pre></td></tr></table></figure>
<p>把 <code># platform :ios, '8.0'</code> 和 <code># use_frameworks!</code> 两行注释打开</p>
<figure class="highlight elixir"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br><span class="line">13</span><br><span class="line">14</span><br><span class="line">15</span><br><span class="line">16</span><br><span class="line">17</span><br><span class="line">18</span><br><span class="line">19</span><br></pre></td><td class="code"><pre><span class="line"><span class="comment"># Uncomment this line to define a global platform for your project</span></span><br><span class="line"></span><br><span class="line"><span class="comment"># platform :ios, '8.0'</span></span><br><span class="line"></span><br><span class="line"><span class="comment"># Uncomment this line if you're using Swift</span></span><br><span class="line"></span><br><span class="line"><span class="comment"># use_frameworks!</span></span><br><span class="line"></span><br><span class="line">target <span class="string">'TestPeoject'</span> <span class="keyword">do</span></span><br><span class="line"></span><br><span class="line"><span class="keyword">end</span></span><br><span class="line"></span><br><span class="line">target <span class="string">'TestPeojectTests'</span> <span class="keyword">do</span></span><br><span class="line"></span><br><span class="line"><span class="keyword">end</span></span><br><span class="line"></span><br><span class="line">target <span class="string">'TestPeojectUITests'</span> <span class="keyword">do</span></span><br><span class="line"></span><br><span class="line"><span class="keyword">end</span></span><br></pre></td></tr></table></figure>
<p>这就告诉了CocoaPods–你的项目使用的是iOS 8.0,并且将使用框架来代替静态库。</p>
<p>想要在Swift中使用CocoaPods,你必须明确的写出use_frameworks! 来选择使用框架。如果你忘了写这个,CocoaPods能检测到你使用使用Swift CocoaPods,你安装pods的时候就会报错。</p>
<h3 id="关于“库”"><a href="#关于“库”" class="headerlink" title="关于“库”"></a><strong>关于“库”</strong></h3><p>你会看到”library”通常代指库或框架。很抱歉这个教程也在无意间混杂了这两个概念。实际上,当某人提到”Swift library”,他们实际上指的是”Swift dynamic frameworks”,因为swift不允许静态库。</p>
<p>你可能想知道,”库(library)和框架(frameworkd)和cocoaPod之间的不同之处”。</p>
<p>Cocoapod或者简写为”pod”是一种惯常的叫法,用来表示使用Cocoapods工具添加库或者框架到你的应用程序中。</p>
<p>iOS 8引入了动态框架,这就允许了代码、图片和其他的东西(assets)可以被一起打包。在iOS 8之前,CocoaPods被作为静态库来创建,就是很”臃肿的”二进制文件。这意味着它包含了一些代码说明设置(例如i386 for the simulator, armv7 for devices等),但是它们不允许包含任何资源,例如图片或资产。</p>
<p>另外一个重要的区别是动态框架有命名空间类,而静态库没有。所以,如果单个项目中不同的静态库里分别有一个叫做MyTestClasses的类,那么Xcode可能不能成功创建工程因为它会因重复的标识而导致连接失败。然而,Xcode很乐意在一个工程里的不同框架下分别有一个名字相同的类。</p>
<p>为什么这很重要?不像OC,标准的Swift运行时库(runtime libraries)没有包含在iOS中!这意味着你的框架必须包含了必要的Swift运行时库。因此,用Swift语言写的pods必须以动态框架形式创建。如果苹果允许Swift静态库,那么使用同一个标准运行时依赖的不同库中将会产生重复符号。</p>
<p>幸运的是,CocoaPods为你做了这些事。它甚至能做到一次性包含需要的依赖关系。你所要做的就是在使用swift cocoaPods时记得在Podfile中包含use_frameworks! ,那就没问题了。</p>
<h3 id="安装依赖"><a href="#安装依赖" class="headerlink" title="安装依赖"></a>安装依赖</h3><p>修改Podfile文件如下:</p>
<figure class="highlight elixir"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br><span class="line">13</span><br><span class="line">14</span><br><span class="line">15</span><br><span class="line">16</span><br><span class="line">17</span><br><span class="line">18</span><br><span class="line">19</span><br><span class="line">20</span><br><span class="line">21</span><br></pre></td><td class="code"><pre><span class="line"><span class="comment"># Uncomment this line to define a global platform for your project</span></span><br><span class="line"></span><br><span class="line"><span class="comment"># platform :ios, '8.0'</span></span><br><span class="line"></span><br><span class="line"><span class="comment"># Uncomment this line if you're using Swift</span></span><br><span class="line"></span><br><span class="line"><span class="comment"># use_frameworks!</span></span><br><span class="line"></span><br><span class="line">target <span class="string">'TestPeoject'</span> <span class="keyword">do</span></span><br><span class="line"></span><br><span class="line">pod <span class="string">'AFNetworking'</span>, <span class="string">'~> 3.1.0'</span></span><br><span class="line"></span><br><span class="line"><span class="keyword">end</span></span><br><span class="line"></span><br><span class="line">target <span class="string">'TestPeojectTests'</span> <span class="keyword">do</span></span><br><span class="line"></span><br><span class="line"><span class="keyword">end</span></span><br><span class="line"></span><br><span class="line">target <span class="string">'TestPeojectUITests'</span> <span class="keyword">do</span></span><br><span class="line"></span><br><span class="line"><span class="keyword">end</span></span><br></pre></td></tr></table></figure>
<p>这个是告诉CocoaPods你想添加大于3.1.0版本小于3.2.0版本的AFNetworking到你的工程中作为一个依赖性文件。</p>
<h3 id="关于Podsfile"><a href="#关于Podsfile" class="headerlink" title="关于Podsfile"></a>关于Podsfile</h3><figure class="highlight actionscript"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br><span class="line">13</span><br><span class="line">14</span><br><span class="line">15</span><br><span class="line">16</span><br><span class="line">17</span><br></pre></td><td class="code"><pre><span class="line">pod <span class="string">'AFNetworking'</span> <span class="comment">//不显式指定依赖库版本,表示每次都获取最新版本</span></span><br><span class="line"></span><br><span class="line">pod <span class="string">'AFNetworking'</span>, <span class="string">'2.0'</span> <span class="comment">//只使用2.0版本</span></span><br><span class="line"></span><br><span class="line">pod <span class="string">'AFNetworking'</span>, <span class="string">'> 2.0'</span> <span class="comment">//使用高于2.0的版本</span></span><br><span class="line"></span><br><span class="line">pod <span class="string">'AFNetworking'</span>, <span class="string">'>= 2.0'</span> <span class="comment">//使用大于或等于2.0的版本</span></span><br><span class="line"></span><br><span class="line">pod <span class="string">'AFNetworking'</span>, <span class="string">'< 2.0'</span> <span class="comment">//使用小于2.0的版本</span></span><br><span class="line"></span><br><span class="line">pod <span class="string">'AFNetworking'</span>, <span class="string">'<= 2.0'</span> <span class="comment">//使用小于或等于2.0的版本</span></span><br><span class="line"></span><br><span class="line">pod <span class="string">'AFNetworking'</span>, <span class="string">'~> 0.1.2'</span> <span class="comment">//使用大于等于0.1.2但小于0.2的版本</span></span><br><span class="line"></span><br><span class="line">pod <span class="string">'AFNetworking'</span>, <span class="string">'~>0.1'</span> <span class="comment">//使用大于等于0.1但小于1.0的版本</span></span><br><span class="line"></span><br><span class="line">pod <span class="string">'AFNetworking'</span>, <span class="string">'~>0'</span> <span class="comment">//高于0的版本,写这个限制和什么都不写是一个效果,都表示使用最新版本</span></span><br></pre></td></tr></table></figure>
<p>最后,从工程的 workspace 文件启动 Xcode 来编写你的程序。</p>
<p>如果在 .swift 文件中,无法 import 到你的依赖库,或者无法自动提示时:</p>
<p>1.选择target(就是左边你的工程target)—— BuildSettings —— search Paths 下的 User Header Search Paths(如图所示:)</p>
<p> <img src="/images/IOS_Swift_使用_cocopods步骤/1.jpg" alt="1"></p>
<p>2.双击后面的空白区域:(如图所示:)</p>
<p> <img src="/images/IOS_Swift_使用_cocopods步骤/2.jpg" alt="2"></p>
<p>出现下面的图,并且点击“+”号添加一项:并且输入:“$(PODS_ROOT)”(没有引号),选择:recursive(会在相应的目录递归搜索文件):</p>
<p> <img src="/images/IOS_Swift_使用_cocopods步骤/3.jpg" alt="3"></p>
<p>这样设置完成之后,再在工程中导入cocoaPods安装的第三方类库就有提示了。</p>
]]></content>
</entry>
<entry>
<title><![CDATA[android adb 常用命令收集]]></title>
<url>http://ethanwanggg.github.io/2016/07/07/android-adb-%E5%B8%B8%E7%94%A8%E5%91%BD%E4%BB%A4%E6%94%B6%E9%9B%86/</url>
<content type="html"><![CDATA[<hr>
<figure class="highlight sql"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">adb <span class="keyword">start</span>-<span class="keyword">server</span></span><br></pre></td></tr></table></figure>
<p>启动adb服务,如果它没启动的话</p>
<figure class="highlight sql"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">adb <span class="keyword">kill</span>-<span class="keyword">server</span></span><br></pre></td></tr></table></figure>
<p>关闭服务</p>
<figure class="highlight nginx"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line"><span class="attribute">adb</span> devices</span><br></pre></td></tr></table></figure>
<p>查看所连接的设备以及设备所对应的序列号</p>
<figure class="highlight cmake"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">adb <span class="keyword">install</span> -r xxxx.apk</span><br></pre></td></tr></table></figure>
<p>安装app,需要注意的是如果连接了两台设备,则会报错,此时可以添加-s <serialnumber>来处理</serialnumber></p>
<a id="more"></a>
<figure class="highlight nginx"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line"><span class="attribute">adb</span> uninstall packagename</span><br></pre></td></tr></table></figure>
<p>卸载app,有时候在手机上卸载App会出现数据清理不干净,导致App再也装不上了,这个时候可以敲命 令来卸载</p>
<figure class="highlight gauss"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">adb <span class="built_in">shell</span></span><br></pre></td></tr></table></figure>
<p>进入shell环境</p>
<figure class="highlight gauss"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">adb <span class="built_in">shell</span> pm <span class="keyword">clear</span> packagename</span><br></pre></td></tr></table></figure>
<p>清除应用的数据,很常用吧?</p>
<figure class="highlight livecodeserver"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">adb <span class="built_in">shell</span> am <span class="built_in">start</span> -n packagename/packagename.activityname</span><br></pre></td></tr></table></figure>
<p>启动某个应用的某个Activity(以前调试老年机,那种Launcher上没有APP的机器,全靠它啊!!!!!!!)</p>
<figure class="highlight arduino"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">adb <span class="built_in">connect</span> <device-ip-address></span><br></pre></td></tr></table></figure>
<p>连接到指定的ip,这个通常配合wifidebug</p>
<figure class="highlight gauss"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">adb <span class="built_in">shell</span> dumpsys activity top</span><br></pre></td></tr></table></figure>
<p>查看栈顶Activity,可以用来获取包名,可以用来查看其它app的包名</p>
<figure class="highlight vim"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">adb <span class="keyword">shell</span> <span class="keyword">ps</span></span><br></pre></td></tr></table></figure>
<p>查看进程信息</p>
<figure class="highlight stata"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">adb <span class="keyword">shell</span> pm <span class="keyword">list</span> packages -<span class="built_in">f</span></span><br></pre></td></tr></table></figure>
<p>查看所有已安装的应用的包名</p>
<figure class="highlight gauss"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">adb <span class="built_in">shell</span> dumpsys activity</span><br></pre></td></tr></table></figure>
<p>dumpsys系列命令可以帮助我们查看各种信息</p>
<p>am的状态 Activity Manager State</p>
<figure class="highlight actionscript"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">adb shell dumpsys <span class="class"><span class="keyword">package</span></span></span><br></pre></td></tr></table></figure>
<p>包信息 Package Information</p>
<figure class="highlight gauss"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">adb <span class="built_in">shell</span> dumpsys meminfo</span><br></pre></td></tr></table></figure>
<p>内存使用情况Memory Usage</p>
<figure class="highlight xml"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">adb pull <span class="tag"><<span class="name">remote</span>></span> <span class="tag"><<span class="name">local</span>></span></span><br></pre></td></tr></table></figure>
<p>从手机复制文件出来,比如把Crash日志写在SD卡上,再pull到电脑上 或者 pull ANR的trace日志</p>
<figure class="highlight xml"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">adb push <span class="tag"><<span class="name">local</span>></span> <span class="tag"><<span class="name">remote</span>></span></span><br></pre></td></tr></table></figure>
<p>向手机发送文件,比如测试热修复补丁~</p>
<p>eg. adb push foo.txt /sdcard/foo.txt</p>
<figure class="highlight gauss"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">adb <span class="built_in">shell</span> cat /<span class="function"><span class="keyword">proc</span>/<span class="title">cpuinfo</span></span></span><br></pre></td></tr></table></figure>
<p>查看手机CPU,可以看到手机架构(eg.ARMv7) 和几核处理器</p>
<p>可以帮助我们选择so库,排查手机cpu架构相关的问题</p>
<figure class="highlight gauss"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">adb <span class="built_in">shell</span> df</span><br></pre></td></tr></table></figure>
<p>获取手机磁盘空间</p>
<figure class="highlight stylus"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">adb shell getprop ro<span class="selector-class">.build</span><span class="selector-class">.version</span><span class="selector-class">.release</span></span><br></pre></td></tr></table></figure>
<p>获取手机系统版本</p>
<figure class="highlight gauss"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">adb <span class="built_in">shell</span> dumpsys procstats</span><br></pre></td></tr></table></figure>
<p>Memory Use Over Time</p>
<figure class="highlight gauss"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">adb <span class="built_in">shell</span> dumpsys gfxinfo</span><br></pre></td></tr></table></figure>
<p>Graphics State</p>
<figure class="highlight applescript"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">adb <span class="built_in">version</span></span><br></pre></td></tr></table></figure>
<p>查看adb版本</p>
<figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">adb <span class="built_in">help</span></span><br></pre></td></tr></table></figure>
<p>进入adb帮助界面</p>
]]></content>
</entry>
<entry>
<title><![CDATA[浅谈设计模式]]></title>
<url>http://ethanwanggg.github.io/2016/06/16/%E6%B5%85%E8%B0%88%E8%AE%BE%E8%AE%A1%E6%A8%A1%E5%BC%8F/</url>
<content type="html"><![CDATA[<hr>
<p>从学习软件开发开始,我们一直在讨论的就是程序设计模式。常用的有<strong>MVC</strong> 、<strong>MVP</strong> 、<strong>MVVM</strong> ,今天想把这几个模式拿出来说一说。</p>
<h1 id="1-MVC"><a href="#1-MVC" class="headerlink" title="1.MVC:"></a>1.MVC:</h1><ul>
<li>模型(Model):数据存储传递</li>
<li>视图(View):界面UI部分</li>
<li>控制器(Controller):</li>
</ul>
<blockquote>
<p>执行流程:<br>1.View与用户交互,将动作传递给Controller<br>2.Controller调用Model进行数据请求<br>3.服务端返回处理结果后,Model通知View<br>4.View进行画面处理</p>
</blockquote>
<p> 缺点:Controller不知道任何View的细节,一个Controller能被多个View使用,很难对Controller进行单元测试,Controller操作数据,但是如何从View上断言这些数据的变化呢?<br><br> <a id="more"></a><br><img src="/images/浅谈设计模式/MVC.png" alt="MVC" title="MVC"></p>
<h1 id="2-MVP"><a href="#2-MVP" class="headerlink" title="2.MVP:"></a>2.MVP:</h1><p>MVP模式中将Controller 替换为Presenter,彻底的分离了View 与Model 的关联。Presenter 做业务逻辑,View 与 Model 不发生联系,都通过 Presenter 传递。</p>
<blockquote>
<p>执行流程<br>1.View与用户交互,将动作转交给Presenter。<br>2.Presenter操作Model进行数据请求。<br>3.Model通知Presenter数据变化。<br>4.Presenter更新View的变化。</p>
</blockquote>
<p>优点:<br>1.模型与视图的彻底分离,修改视图不再影响模型。<br>2.Presenter可应用于多个视图。<br>3.方便协作,UI与后台借口测试互不干涉</p>
<p>缺点:<br>1.类数量爆炸,代码复杂学习成本高。<br>2.视图的渲染在Presenter中,Presenter与视图的关系过于紧密,可能导致视图变化连带着Presenter也要变化。</p>
<p><img src="/images/浅谈设计模式/MVP.png" alt="MVP" title="MVP"></p>
<h1 id="3-MVVM"><a href="#3-MVVM" class="headerlink" title="3.MVVM:"></a>3.MVVM:</h1><p>MVVM是在Model的基础上添加一个ViewModel,这个ViewModel除了正常的属性意外,还包括一些供View显示用的属性。Presenter 改名为 ViewModel,基本上与 MVP 模式完全一致,只是将Presenter 与View 调整为了双向绑定。</p>
<p><img src="/images/浅谈设计模式/MVVM.png" alt="MVVM" title="MVVM"></p>
<hr>
]]></content>
</entry>
<entry>
<title><![CDATA[博客开张咯]]></title>
<url>http://ethanwanggg.github.io/2016/05/19/hello-world/</url>
<content type="html"><![CDATA[<p>一直有写博客的想法,百般折腾,终于在今天开通了!</p>
]]></content>
</entry>
</search>