PageSourceSearch

https://tanhao.me/

html tanhao.me collected 2026-09-26 10:02:46 UTC 47,384 bytes, 2,010 lines download raw bytes

1<!doctype html>
2
3
4
5  
6
7
8<html class="theme-next pisces use-motion" lang="zh-Hans">
9<head>
10  <meta charset="UTF-8"/>
11<meta http-equiv="X-UA-Compatible" content="IE=edge" />
12<meta name="viewport" content="width=device-width, initial-scale=1, maximum-scale=1"/>
13
14
15
16<meta http-equiv="Cache-Control" content="no-transform" />
17<meta http-equiv="Cache-Control" content="no-siteapp" />
18
19
20
21
22
23
24
25
26
27
28
29
30  
31  
32  <link href="/lib/fancybox/source/jquery.fancybox.css?v=2.1.5" rel="stylesheet" type="text/css" />
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    <link href="//fonts.googleapis.com/css?family=Lato:300,300italic,400,400italic,700,700italic&subset=latin,latin-ext" rel="stylesheet" type="text/css">
59  
60
61
62
63
64
65
66<link href="/lib/font-awesome/css/font-awesome.min.css?v=4.6.2" rel="stylesheet" type="text/css" />
67
68<link href="/css/main.css?v=5.1.0" rel="stylesheet" type="text/css" />
69
70
71  <meta name="keywords" content="iOS,OSX,Objective-C,Xcode,TanHao" />
72
73
74
75
76
77
78
79
80  <link rel="shortcut icon" type="image/x-icon" href="/favicon.ico?v=5.1.0" />
81
82
83
84
85
86
87<meta name="description" content="程序的世界让我着迷...">
88<meta property="og:type" content="website">
89<meta property="og:title" content="老谭笔记">
90<meta property="og:url" content="https://www.tanhao.me/index.html">
91<meta property="og:site_name" content="老谭笔记">
92<meta property="og:description" content="程序的世界让我着迷...">
93<meta name="twitter:card" content="summary">
94<meta name="twitter:title" content="老谭笔记">
95<meta name="twitter:description" content="程序的世界让我着迷...">
96
97
98
99<script type="text/javascript" id="hexo.configurations">
100  var NexT = window.NexT || {};
101  var CONFIG = {
102    root: '/',
103    scheme: 'Pisces',
104    sidebar: {"position":"right","display":"post"},
105    fancybox: true,
106    motion: true,
107    duoshuo: {
108      userId: '0',
109      author: '博主'
110    },
111    algolia: {
112      applicationID: '',
113      apiKey: '',
114      indexName: '',
115      hits: {"per_page":10},
116      labels: {"input_placeholder":"Search for Posts","hits_empty":"We didn't find any results for the search: ${query}","hits_stats":"${hits} results found in ${time} ms"}
117    }
118  };
119</script>
119
120
121
122
123  <link rel="canonical" href="https://www.tanhao.me/"/>
124
125
126
127
128
129  <title> 老谭笔记 </title>
130</head>
131
132<body itemscope itemtype="http://schema.org/WebPage" lang="zh-Hans">
133
134  
135
136
137
138
139
140  
140<script type="text/javascript">
141    (function() {
142      var hm = document.createElement("script");
143      hm.src = "//tajs.qq.com/stats?sId=8912449";
144      var s = document.getElementsByTagName("script")[0];
145      s.parentNode.insertBefore(hm, s);
146    })();
147  </script>
147
148
149
150
151
152
153
154  
155  
156    
157  
158
159  <div class="container one-collumn sidebar-position-right 
160   page-home 
161 ">
162    <div class="headband"></div>
163
164    <header id="header" class="header" itemscope itemtype="http://schema.org/WPHeader">
165      <div class="header-inner"><div class="site-meta ">
166  
167
168  <div class="custom-logo-site-title">
169    <a href="/"  class="brand" rel="start">
170      <span class="logo-line-before"><i></i></span>
171      <span class="site-title">老谭笔记</span>
172      <span class="logo-line-after"><i></i></span>
173    </a>
174  </div>
175    
176      <p class="site-subtitle"></p>
177    
178</div>
179
180<div class="site-nav-toggle">
181  <button>
182    <span class="btn-bar"></span>
183    <span class="btn-bar"></span>
184    <span class="btn-bar"></span>
185  </button>
186</div>
187
188<nav class="site-nav">
189  
190
191  
192    <ul id="menu" class="menu">
193      
194        
195        <li class="menu-item menu-item-home">
196          <a href="/" rel="section">
197            
198              <i class="menu-item-icon fa fa-fw fa-home"></i> <br />
199            
200            首页
201          </a>
202        </li>
203      
204        
205        <li class="menu-item menu-item-archives">
206          <a href="/archives" rel="section">
207            
208              <i class="menu-item-icon fa fa-fw fa-archive"></i> <br />
209            
210            归档
211          </a>
212        </li>
213      
214        
215        <li class="menu-item menu-item-tags">
216          <a href="/tags" rel="section">
217            
218              <i class="menu-item-icon fa fa-fw fa-tags"></i> <br />
219            
220            标签
221          </a>
222        </li>
223      
224        
225        <li class="menu-item menu-item-about">
226          <a href="/about" rel="section">
227            
228              <i class="menu-item-icon fa fa-fw fa-user"></i> <br />
229            
230            关于
231          </a>
232        </li>
233      
234
235      
236        <li class="menu-item menu-item-search">
237          
238            <a href="javascript:;" class="st-search-show-outputs">
239          
240            
241              <i class="menu-item-icon fa fa-search fa-fw"></i> <br />
242            
243            搜索
244          </a>
245        </li>
246      
247    </ul>
248  
249
250  
251    <div class="site-search">
252      
253  <form class="site-search-form">
254  <input type="text" id="st-search-input" class="st-search-input st-default-search-input" />
255</form>
256
257<script type="text/javascript">
258  (function(w,d,t,u,n,s,e){w['SwiftypeObject']=n;w[n]=w[n]||function(){
259    (w[n].q=w[n].q||[]).push(arguments);};s=d.createElement(t);
260    e=d.getElementsByTagName(t)[0];s.async=1;s.src=u;e.parentNode.insertBefore(s,e);
261  })(window,document,'script','//s.swiftypecdn.com/install/v2/st.js','_st');
262
263  _st('install', 'Myzn8MXQwxivhKpZtE6L','2.0.0');
264</script>
264
265
266
267
268    </div>
269  
270</nav>
271
272
273
274 </div>
275    </header>
276
277    <main id="main" class="main">
278      <div class="main-inner">
279        <div class="content-wrap">
280          <div id="content" class="content">
281            
282  <section id="posts" class="posts-expand">
283    
284      
285
286  
287
288  
289  
290  
291
292  <article class="post post-type-normal " itemscope itemtype="http://schema.org/Article">
293  <link itemprop="mainEntityOfPage" href="https://www.tanhao.me/talk/170924.html/">
294
295  <span style="display:none" itemprop="author" itemscope itemtype="http://schema.org/Person">
296    <meta itemprop="name" content="TanHao">
297    <meta itemprop="description" content="">
298    <meta itemprop="image" content="/avatar.jpg">
299  </span>
300
301  <span style="display:none" itemprop="publisher" itemscope itemtype="http://schema.org/Organization">
302    <meta itemprop="name" content="老谭笔记">
303    <span style="display:none" itemprop="logo" itemscope itemtype="http://schema.org/ImageObject">
304      <img style="display:none;" itemprop="url image" alt="老谭笔记" src="">
305    </span>
306  </span>
307
308    
309      <header class="post-header">
310
311        
312        
313          <h1 class="post-title" itemprop="name headline">
314            
315            
316              
317                
318                <a class="post-title-link" href="/talk/170924.html/" itemprop="url">
319                  从腾讯到阿里巴巴
320                </a>
321              
322            
323          </h1>
324        
325
326        <div class="post-meta">
327          <span class="post-time">
328            
329              <span class="post-meta-item-icon">
330                <i class="fa fa-calendar-o"></i>
331              </span>
332              
333                <span class="post-meta-item-text">发表于</span>
334              
335              <time title="Post created" itemprop="dateCreated datePublished" datetime="2017-09-24T19:31:00+08:00">
336                2017-09-24
337              </time>
338            
339
340            
341
342            
343          </span>
344
345          
346            <span class="post-category" >
347            
348              <span class="post-meta-divider">|</span>
349            
350              <span class="post-meta-item-icon">
351                <i class="fa fa-folder-o"></i>
352              </span>
353              
354                <span class="post-meta-item-text">分类于</span>
355              
356              
357                <span itemprop="about" itemscope itemtype="http://schema.org/Thing">
358                  <a href="/categories/talk/" itemprop="url" rel="index">
359                    <span itemprop="name">talk</span>
360                  </a>
361                </span>
362
363                
364                
365              
366            </span>
367          
368
369          
370            
371          
372
373          
374
375          
376          
377
378          
379
380          
381
382        </div>
383      </header>
384    
385
386
387    <div class="post-body" itemprop="articleBody">
388
389      
390      
391
392      
393        
394          <p>距上一次写文章已经快一年时间了,其实我挺喜欢写作或是笔记的,这个博客也坚持经营6年有余了。人到一定的阶段精力总是会变得分散,更是相信所谓的坚持只靠意念是不够的。但我又不希望某一天这里的文章变成像是一张张泛黄的邮票,唯有我时常翻出来如数家珍,所以今天特地把其它的事情都推到了一边,准备记录一些无关于技术的感想。</p>
395          <!--noindex-->
396          <div class="post-more-link text-center">
397            <a class="btn" href="/talk/170924.html/#more" rel="contents">
398              阅读全文 &raquo;
399            </a>
400          </div>
401          <!--/noindex-->
402        
403      
404    </div>
405
406    <div>
407      
408    </div>
409
410    <div>
411      
412    </div>
413
414
415    <footer class="post-footer">
416      
417
418      
419
420      
421      
422        <div class="post-eof"></div>
423      
424    </footer>
425  </article>
426
427
428    
429      
430
431  
432
433  
434  
435  
436
437  <article class="post post-type-normal " itemscope itemtype="http://schema.org/Article">
438  <link itemprop="mainEntityOfPage" href="https://www.tanhao.me/code/161127.html/">
439
440  <span style="display:none" itemprop="author" itemscope itemtype="http://schema.org/Person">
441    <meta itemprop="name" content="TanHao">
442    <meta itemprop="description" content="">
443    <meta itemprop="image" content="/avatar.jpg">
444  </span>
445
446  <span style="display:none" itemprop="publisher" itemscope itemtype="http://schema.org/Organization">
447    <meta itemprop="name" content="老谭笔记">
448    <span style="display:none" itemprop="logo" itemscope itemtype="http://schema.org/ImageObject">
449      <img style="display:none;" itemprop="url image" alt="老谭笔记" src="">
450    </span>
451  </span>
452
453    
454      <header class="post-header">
455
456        
457        
458          <h1 class="post-title" itemprop="name headline">
459            
460            
461              
462                
463                <a class="post-title-link" href="/code/161127.html/" itemprop="url">
464                  Swift服务端Web框架Kitura初体验
465                </a>
466              
467            
468          </h1>
469        
470
471        <div class="post-meta">
472          <span class="post-time">
473            
474              <span class="post-meta-item-icon">
475                <i class="fa fa-calendar-o"></i>
476              </span>
477              
478                <span class="post-meta-item-text">发表于</span>
479              
480              <time title="Post created" itemprop="dateCreated datePublished" datetime="2016-11-27T23:31:00+08:00">
481                2016-11-27
482              </time>
483            
484
485            
486
487            
488          </span>
489
490          
491            <span class="post-category" >
492            
493              <span class="post-meta-divider">|</span>
494            
495              <span class="post-meta-item-icon">
496                <i class="fa fa-folder-o"></i>
497              </span>
498              
499                <span class="post-meta-item-text">分类于</span>
500              
501              
502                <span itemprop="about" itemscope itemtype="http://schema.org/Thing">
503                  <a href="/categories/code/" itemprop="url" rel="index">
504                    <span itemprop="name">code</span>
505                  </a>
506                </span>
507
508                
509                
510              
511            </span>
512          
513
514          
515            
516          
517
518          
519
520          
521          
522
523          
524
525          
526
527        </div>
528      </header>
529    
530
531
532    <div class="post-body" itemprop="articleBody">
533
534      
535      
536
537      
538        
539          <p>Kitura是由IBM公司用Swift开发并开源的一个轻量级Web框架(<a href="https://github.com/IBM-Swift/Kitura">https://github.com/IBM-Swift/Kitura</a>),更新速度非常迅速,Swift3.0发布之后,Kitura便推出了1.0版本,目前最新的版本为1.2,并且Kitura也已经运用在IBM的PaaS平台BlueMix环境中,可谓Kitura让Swift在Web框架领域成为一种新鲜的生产力工具.
539</p>
540<p>之前一直只闻其声,但从来没有实际使用过,今天在自己的服务器和本地都小试了一下,部署确实非常方便,大致记录一下这个过程.</p>
541          <!--noindex-->
542          <div class="post-more-link text-center">
543            <a class="btn" href="/code/161127.html/#more" rel="contents">
544              阅读全文 &raquo;
545            </a>
546          </div>
547          <!--/noindex-->
548        
549      
550    </div>
551
552    <div>
553      
554    </div>
555
556    <div>
557      
558    </div>
559
560
561    <footer class="post-footer">
562      
563
564      
565
566      
567      
568        <div class="post-eof"></div>
569      
570    </footer>
571  </article>
572
573
574    
575      
576
577  
578
579  
580  
581  
582
583  <article class="post post-type-normal " itemscope itemtype="http://schema.org/Article">
584  <link itemprop="mainEntityOfPage" href="https://www.tanhao.me/code/160723.html/">
585
586  <span style="display:none" itemprop="author" itemscope itemtype="http://schema.org/Person">
587    <meta itemprop="name" content="TanHao">
588    <meta itemprop="description" content="">
589    <meta itemprop="image" content="/avatar.jpg">
590  </span>
591
592  <span style="display:none" itemprop="publisher" itemscope itemtype="http://schema.org/Organization">
593    <meta itemprop="name" content="老谭笔记">
594    <span style="display:none" itemprop="logo" itemscope itemtype="http://schema.org/ImageObject">
595      <img style="display:none;" itemprop="url image" alt="老谭笔记" src="">
596    </span>
597  </span>
598
599    
600      <header class="post-header">
601
602        
603        
604          <h1 class="post-title" itemprop="name headline">
605            
606            
607              
608                
609                <a class="post-title-link" href="/code/160723.html/" itemprop="url">
610                  Method Swizzling的各种姿势
611                </a>
612              
613            
614          </h1>
615        
616
617        <div class="post-meta">
618          <span class="post-time">
619            
620              <span class="post-meta-item-icon">
621                <i class="fa fa-calendar-o"></i>
622              </span>
623              
624                <span class="post-meta-item-text">发表于</span>
625              
626              <time title="Post created" itemprop="dateCreated datePublished" datetime="2016-07-24T00:37:00+08:00">
627                2016-07-24
628              </time>
629            
630
631            
632
633            
634          </span>
635
636          
637            <span class="post-category" >
638            
639              <span class="post-meta-divider">|</span>
640            
641              <span class="post-meta-item-icon">
642                <i class="fa fa-folder-o"></i>
643              </span>
644              
645                <span class="post-meta-item-text">分类于</span>
646              
647              
648                <span itemprop="about" itemscope itemtype="http://schema.org/Thing">
649                  <a href="/categories/code/" itemprop="url" rel="index">
650                    <span itemprop="name">code</span>
651                  </a>
652                </span>
653
654                
655                
656              
657            </span>
658          
659
660          
661            
662          
663
664          
665
666          
667          
668
669          
670
671          
672
673        </div>
674      </header>
675    
676
677
678    <div class="post-body" itemprop="articleBody">
679
680      
681      
682
683      
684        
685          <p>因为Objective-C的runtime机制, Method Swizzling这个黑魔法解决了我们实际开发中诸多常规手段所无法解决的问题, 比如代码的插桩,Hook,Patch等等. 我们首先看看常规的Method Swizzling是怎样用的, NSHipster有一篇介绍基本用法的文章<a href="http://nshipster.com/method-swizzling/">Method Swizzling</a>, 我们就先以这篇文章中的示例开始说起吧:</p>
686          <!--noindex-->
687          <div class="post-more-link text-center">
688            <a class="btn" href="/code/160723.html/#more" rel="contents">
689              阅读全文 &raquo;
690            </a>
691          </div>
692          <!--/noindex-->
693        
694      
695    </div>
696
697    <div>
698      
699    </div>
700
701    <div>
702      
703    </div>
704
705
706    <footer class="post-footer">
707      
708
709      
710
711      
712      
713        <div class="post-eof"></div>
714      
715    </footer>
716  </article>
717
718
719    
720      
721
722  
723
724  
725  
726  
727
728  <article class="post post-type-normal " itemscope itemtype="http://schema.org/Article">
729  <link itemprop="mainEntityOfPage" href="https://www.tanhao.me/code/160702.html/">
730
731  <span style="display:none" itemprop="author" itemscope itemtype="http://schema.org/Person">
732    <meta itemprop="name" content="TanHao">
733    <meta itemprop="description" content="">
734    <meta itemprop="image" content="/avatar.jpg">
735  </span>
736
737  <span style="display:none" itemprop="publisher" itemscope itemtype="http://schema.org/Organization">
738    <meta itemprop="name" content="老谭笔记">
739    <span style="display:none" itemprop="logo" itemscope itemtype="http://schema.org/ImageObject">
740      <img style="display:none;" itemprop="url image" alt="老谭笔记" src="">
741    </span>
742  </span>
743
744    
745      <header class="post-header">
746
747        
748        
749          <h1 class="post-title" itemprop="name headline">
750            
751            
752              
753                
754                <a class="post-title-link" href="/code/160702.html/" itemprop="url">
755                  使用NSProxy和NSObject设计代理类的差异
756                </a>
757              
758            
759          </h1>
760        
761
762        <div class="post-meta">
763          <span class="post-time">
764            
765              <span class="post-meta-item-icon">
766                <i class="fa fa-calendar-o"></i>
767              </span>
768              
769                <span class="post-meta-item-text">发表于</span>
770              
771              <time title="Post created" itemprop="dateCreated datePublished" datetime="2016-07-02T22:49:00+08:00">
772                2016-07-02
773              </time>
774            
775
776            
777
778            
779          </span>
780
781          
782            <span class="post-category" >
783            
784              <span class="post-meta-divider">|</span>
785            
786              <span class="post-meta-item-icon">
787                <i class="fa fa-folder-o"></i>
788              </span>
789              
790                <span class="post-meta-item-text">分类于</span>
791              
792              
793                <span itemprop="about" itemscope itemtype="http://schema.org/Thing">
794                  <a href="/categories/code/" itemprop="url" rel="index">
795                    <span itemprop="name">code</span>
796                  </a>
797                </span>
798
799                
800                
801              
802            </span>
803          
804
805          
806            
807          
808
809          
810
811          
812          
813
814          
815
816          
817
818        </div>
819      </header>
820    
821
822
823    <div class="post-body" itemprop="articleBody">
824
825      
826      
827
828      
829        
830          <p>经常发现在一些需要使用消息转发而创建代理类时, 不同的程序员都有着不同的使用方法, 有些采用继承于NSObject, 而有一些采用继承自NSProxy. 二者都是Foundation框架中的基类, 并且都实现了<code>&lt;NSObject&gt;</code>这个接口, 从命名和文档中看NSProxy天生就是用来干这个事情的. 但即便如此, 它们却都定义了相同的消息转发的接口, 那我们在使用二者来完成这个工作时有什么差异呢.</p>
831          <!--noindex-->
832          <div class="post-more-link text-center">
833            <a class="btn" href="/code/160702.html/#more" rel="contents">
834              阅读全文 &raquo;
835            </a>
836          </div>
837          <!--/noindex-->
838        
839      
840    </div>
841
842    <div>
843      
844    </div>
845
846    <div>
847      
848    </div>
849
850
851    <footer class="post-footer">
852      
853
854      
855
856      
857      
858        <div class="post-eof"></div>
859      
860    </footer>
861  </article>
862
863
864    
865      
866
867  
868
869  
870  
871  
872
873  <article class="post post-type-normal " itemscope itemtype="http://schema.org/Article">
874  <link itemprop="mainEntityOfPage" href="https://www.tanhao.me/pieces/160626.html/">
875
876  <span style="display:none" itemprop="author" itemscope itemtype="http://schema.org/Person">
877    <meta itemprop="name" content="TanHao">
878    <meta itemprop="description" content="">
879    <meta itemprop="image" content="/avatar.jpg">
880  </span>
881
882  <span style="display:none" itemprop="publisher" itemscope itemtype="http://schema.org/Organization">
883    <meta itemprop="name" content="老谭笔记">
884    <span style="display:none" itemprop="logo" itemscope itemtype="http://schema.org/ImageObject">
885      <img style="display:none;" itemprop="url image" alt="老谭笔记" src="">
886    </span>
887  </span>
888
889    
890      <header class="post-header">
891
892        
893        
894          <h1 class="post-title" itemprop="name headline">
895            
896            
897              
898                
899                <a class="post-title-link" href="/pieces/160626.html/" itemprop="url">
900                  为对象添加一个释放时触发的block
901                </a>
902              
903            
904          </h1>
905        
906
907        <div class="post-meta">
908          <span class="post-time">
909            
910              <span class="post-meta-item-icon">
911                <i class="fa fa-calendar-o"></i>
912              </span>
913              
914                <span class="post-meta-item-text">发表于</span>
915              
916              <time title="Post created" itemprop="dateCreated datePublished" datetime="2016-06-26T18:42:00+08:00">
917                2016-06-26
918              </time>
919            
920
921            
922
923            
924          </span>
925
926          
927            <span class="post-category" >
928            
929              <span class="post-meta-divider">|</span>
930            
931              <span class="post-meta-item-icon">
932                <i class="fa fa-folder-o"></i>
933              </span>
934              
935                <span class="post-meta-item-text">分类于</span>
936              
937              
938                <span itemprop="about" itemscope itemtype="http://schema.org/Thing">
939                  <a href="/categories/pieces/" itemprop="url" rel="index">
940                    <span itemprop="name">pieces</span>
941                  </a>
942                </span>
943
944                
945                
946              
947            </span>
948          
949
950          
951            
952          
953
954          
955
956          
957          
958
959          
960
961          
962
963        </div>
964      </header>
965    
966
967
968    <div class="post-body" itemprop="articleBody">
969
970      
971      
972
973      
974        
975          <p>有时我们需要在一个对象生命周期结束的时候触发一个操作,希望当该对象dealloc的时候调用一个外部指定的block,但又不希望直接hook dealloc方法,这样侵入性太强了.下面贴一段非常简单的实现方式,通过一个category给外部暴露一个block注入的接口,内部将该block封装到一个寄生对象中(Parasite),该寄生对象在dealoc的时候触发block调用,所有的寄生对象通过runtime的AssociatedObject机制与宿主共存亡,从而达到监控宿主生命周期的目的.</p>
976<p><strong><em>注意事项</em></strong></p>
977<ul>
978<li>block触发的线程与对象释放时的线程一致,请注意后续操作的线程安全.</li>
979<li>不要在block中强引用对象,否则引用循环释放不了;</li>
980<li>不要在block中通过weak引用对象,因为此时会返回nil;<br>(根据WWDC2011,Session322对对象释放时间的描述,associated objects清除在对象生命周期中很晚才执行,通过被NSObject -dealloc方法调用的object_dispose()函数完成);</li>
981</ul>
982          <!--noindex-->
983          <div class="post-more-link text-center">
984            <a class="btn" href="/pieces/160626.html/#more" rel="contents">
985              阅读全文 &raquo;
986            </a>
987          </div>
988          <!--/noindex-->
989        
990      
991    </div>
992
993    <div>
994      
995    </div>
996
997    <div>
998      
999    </div>
1000
1001
1002    <footer class="post-footer">
1003      
1004
1005      
1006
1007      
1008      
1009        <div class="post-eof"></div>
1010      
1011    </footer>
1012  </article>
1013
1014
1015    
1016      
1017
1018  
1019
1020  
1021  
1022  
1023
1024  <article class="post post-type-normal " itemscope itemtype="http://schema.org/Article">
1025  <link itemprop="mainEntityOfPage" href="https://www.tanhao.me/code/151113.html/">
1026
1027  <span style="display:none" itemprop="author" itemscope itemtype="http://schema.org/Person">
1028    <meta itemprop="name" content="TanHao">
1029    <meta itemprop="description" content="">
1030    <meta itemprop="image" content="/avatar.jpg">
1031  </span>
1032
1033  <span style="display:none" itemprop="publisher" itemscope itemtype="http://schema.org/Organization">
1034    <meta itemprop="name" content="老谭笔记">
1035    <span style="display:none" itemprop="logo" itemscope itemtype="http://schema.org/ImageObject">
1036      <img style="display:none;" itemprop="url image" alt="老谭笔记" src="">
1037    </span>
1038  </span>
1039
1040    
1041      <header class="post-header">
1042
1043        
1044        
1045          <h1 class="post-title" itemprop="name headline">
1046            
1047            
1048              
1049                
1050                <a class="post-title-link" href="/code/151113.html/" itemprop="url">
1051                  iOS实时卡顿监控
1052                </a>
1053              
1054            
1055          </h1>
1056        
1057
1058        <div class="post-meta">
1059          <span class="post-time">
1060            
1061              <span class="post-meta-item-icon">
1062                <i class="fa fa-calendar-o"></i>
1063              </span>
1064              
1065                <span class="post-meta-item-text">发表于</span>
1066              
1067              <time title="Post created" itemprop="dateCreated datePublished" datetime="2015-11-21T14:25:00+08:00">
1068                2015-11-21
1069              </time>
1070            
1071
1072            
1073
1074            
1075          </span>
1076
1077          
1078            <span class="post-category" >
1079            
1080              <span class="post-meta-divider">|</span>
1081            
1082              <span class="post-meta-item-icon">
1083                <i class="fa fa-folder-o"></i>
1084              </span>
1085              
1086                <span class="post-meta-item-text">分类于</span>
1087              
1088              
1089                <span itemprop="about" itemscope itemtype="http://schema.org/Thing">
1090                  <a href="/categories/code/" itemprop="url" rel="index">
1091                    <span itemprop="name">code</span>
1092                  </a>
1093                </span>
1094
1095                
1096                
1097              
1098            </span>
1099          
1100
1101          
1102            
1103          
1104
1105          
1106
1107          
1108          
1109
1110          
1111
1112          
1113
1114        </div>
1115      </header>
1116    
1117
1118
1119    <div class="post-body" itemprop="articleBody">
1120
1121      
1122      
1123
1124      
1125        
1126          <p>在移动设备上开发软件,性能一直是我们最为关心的话题之一,我们作为程序员除了需要努力提高代码质量之外,及时发现和监控软件中那些造成性能低下的”罪魁祸首”也是我们神圣的职责.</p>
1127          <!--noindex-->
1128          <div class="post-more-link text-center">
1129            <a class="btn" href="/code/151113.html/#more" rel="contents">
1130              阅读全文 &raquo;
1131            </a>
1132          </div>
1133          <!--/noindex-->
1134        
1135      
1136    </div>
1137
1138    <div>
1139      
1140    </div>
1141
1142    <div>
1143      
1144    </div>
1145
1146
1147    <footer class="post-footer">
1148      
1149
1150      
1151
1152      
1153      
1154        <div class="post-eof"></div>
1155      
1156    </footer>
1157  </article>
1158
1159
1160    
1161      
1162
1163  
1164
1165  
1166  
1167  
1168
1169  <article class="post post-type-normal " itemscope itemtype="http://schema.org/Article">
1170  <link itemprop="mainEntityOfPage" href="https://www.tanhao.me/code/150911.html/">
1171
1172  <span style="display:none" itemprop="author" itemscope itemtype="http://schema.org/Person">
1173    <meta itemprop="name" content="TanHao">
1174    <meta itemprop="description" content="">
1175    <meta itemprop="image" content="/avatar.jpg">
1176  </span>
1177
1178  <span style="display:none" itemprop="publisher" itemscope itemtype="http://schema.org/Organization">
1179    <meta itemprop="name" content="老谭笔记">
1180    <span style="display:none" itemprop="logo" itemscope itemtype="http://schema.org/ImageObject">
1181      <img style="display:none;" itemprop="url image" alt="老谭笔记" src="">
1182    </span>
1183  </span>
1184
1185    
1186      <header class="post-header">
1187
1188        
1189        
1190          <h1 class="post-title" itemprop="name headline">
1191            
1192            
1193              
1194                
1195                <a class="post-title-link" href="/code/150911.html/" itemprop="url">
1196                  Protocol Buffer搭建及示例
1197                </a>
1198              
1199            
1200          </h1>
1201        
1202
1203        <div class="post-meta">
1204          <span class="post-time">
1205            
1206              <span class="post-meta-item-icon">
1207                <i class="fa fa-calendar-o"></i>
1208              </span>
1209              
1210                <span class="post-meta-item-text">发表于</span>
1211              
1212              <time title="Post created" itemprop="dateCreated datePublished" datetime="2015-09-01T20:58:25+08:00">
1213                2015-09-01
1214              </time>
1215            
1216
1217            
1218
1219            
1220          </span>
1221
1222          
1223            <span class="post-category" >
1224            
1225              <span class="post-meta-divider">|</span>
1226            
1227              <span class="post-meta-item-icon">
1228                <i class="fa fa-folder-o"></i>
1229              </span>
1230              
1231                <span class="post-meta-item-text">分类于</span>
1232              
1233              
1234                <span itemprop="about" itemscope itemtype="http://schema.org/Thing">
1235                  <a href="/categories/code/" itemprop="url" rel="index">
1236                    <span itemprop="name">code</span>
1237                  </a>
1238                </span>
1239
1240                
1241                
1242              
1243            </span>
1244          
1245
1246          
1247            
1248          
1249
1250          
1251
1252          
1253          
1254
1255          
1256
1257          
1258
1259        </div>
1260      </header>
1261    
1262
1263
1264    <div class="post-body" itemprop="articleBody">
1265
1266      
1267      
1268
1269      
1270        
1271          <p>Protocol Buffer(简称Protobuf或PB)是由Google推出的一种数据交换格式,与传统的XML和JSON不同的是,它是一种二进制格式,免去了文本格式转换的各种困扰,并且转换效率也是非常快,由于它的跨平台、跨编程语言的特点,让它越来越普及,尤其是网络数据交换方面日趋成为一种主流.</p>
1272          <!--noindex-->
1273          <div class="post-more-link text-center">
1274            <a class="btn" href="/code/150911.html/#more" rel="contents">
1275              阅读全文 &raquo;
1276            </a>
1277          </div>
1278          <!--/noindex-->
1279        
1280      
1281    </div>
1282
1283    <div>
1284      
1285    </div>
1286
1287    <div>
1288      
1289    </div>
1290
1291
1292    <footer class="post-footer">
1293      
1294
1295      
1296
1297      
1298      
1299        <div class="post-eof"></div>
1300      
1301    </footer>
1302  </article>
1303
1304
1305    
1306      
1307
1308  
1309
1310  
1311  
1312  
1313
1314  <article class="post post-type-normal " itemscope itemtype="http://schema.org/Article">
1315  <link itemprop="mainEntityOfPage" href="https://www.tanhao.me/talk/150725.html/">
1316
1317  <span style="display:none" itemprop="author" itemscope itemtype="http://schema.org/Person">
1318    <meta itemprop="name" content="TanHao">
1319    <meta itemprop="description" content="">
1320    <meta itemprop="image" content="/avatar.jpg">
1321  </span>
1322
1323  <span style="display:none" itemprop="publisher" itemscope itemtype="http://schema.org/Organization">
1324    <meta itemprop="name" content="老谭笔记">
1325    <span style="display:none" itemprop="logo" itemscope itemtype="http://schema.org/ImageObject">
1326      <img style="display:none;" itemprop="url image" alt="老谭笔记" src="">
1327    </span>
1328  </span>
1329
1330    
1331      <header class="post-header">
1332
1333        
1334        
1335          <h1 class="post-title" itemprop="name headline">
1336            
1337            
1338              
1339                
1340                <a class="post-title-link" href="/talk/150725.html/" itemprop="url">
1341                  将多说评论导入到Disqus
1342                </a>
1343              
1344            
1345          </h1>
1346        
1347
1348        <div class="post-meta">
1349          <span class="post-time">
1350            
1351              <span class="post-meta-item-icon">
1352                <i class="fa fa-calendar-o"></i>
1353              </span>
1354              
1355                <span class="post-meta-item-text">发表于</span>
1356              
1357              <time title="Post created" itemprop="dateCreated datePublished" datetime="2015-07-25T12:20:25+08:00">
1358                2015-07-25
1359              </time>
1360            
1361
1362            
1363
1364            
1365          </span>
1366
1367          
1368            <span class="post-category" >
1369            
1370              <span class="post-meta-divider">|</span>
1371            
1372              <span class="post-meta-item-icon">
1373                <i class="fa fa-folder-o"></i>
1374              </span>
1375              
1376                <span class="post-meta-item-text">分类于</span>
1377              
1378              
1379                <span itemprop="about" itemscope itemtype="http://schema.org/Thing">
1380                  <a href="/categories/talk/" itemprop="url" rel="index">
1381                    <span itemprop="name">talk</span>
1382                  </a>
1383                </span>
1384
1385                
1386                
1387              
1388            </span>
1389          
1390
1391          
1392            
1393          
1394
1395          
1396
1397          
1398          
1399
1400          
1401
1402          
1403
1404        </div>
1405      </header>
1406    
1407
1408
1409    <div class="post-body" itemprop="articleBody">
1410
1411      
1412      
1413
1414      
1415        
1416          <p>多说也算是一款非常成功的产品,想当年社交化评论系统在国内刚刚兴起的时候,友言、灯鹭、畅言和多说厮杀在各个新闻或博客的评论区,好是一番繁荣的景象,后来多说凭借稳定的服务,多样化的插件,坐稳这块小众市场的第一把交椅,让我们一度认为这就是中国版的Disqus。</p>
1417          <!--noindex-->
1418          <div class="post-more-link text-center">
1419            <a class="btn" href="/talk/150725.html/#more" rel="contents">
1420              阅读全文 &raquo;
1421            </a>
1422          </div>
1423          <!--/noindex-->
1424        
1425      
1426    </div>
1427
1428    <div>
1429      
1430    </div>
1431
1432    <div>
1433      
1434    </div>
1435
1436
1437    <footer class="post-footer">
1438      
1439
1440      
1441
1442      
1443      
1444        <div class="post-eof"></div>
1445      
1446    </footer>
1447  </article>
1448
1449
1450    
1451      
1452
1453  
1454
1455  
1456  
1457  
1458
1459  <article class="post post-type-normal " itemscope itemtype="http://schema.org/Article">
1460  <link itemprop="mainEntityOfPage" href="https://www.tanhao.me/project/150718.html/">
1461
1462  <span style="display:none" itemprop="author" itemscope itemtype="http://schema.org/Person">
1463    <meta itemprop="name" content="TanHao">
1464    <meta itemprop="description" content="">
1465    <meta itemprop="image" content="/avatar.jpg">
1466  </span>
1467
1468  <span style="display:none" itemprop="publisher" itemscope itemtype="http://schema.org/Organization">
1469    <meta itemprop="name" content="老谭笔记">
1470    <span style="display:none" itemprop="logo" itemscope itemtype="http://schema.org/ImageObject">
1471      <img style="display:none;" itemprop="url image" alt="老谭笔记" src="">
1472    </span>
1473  </span>
1474
1475    
1476      <header class="post-header">
1477
1478        
1479        
1480          <h1 class="post-title" itemprop="name headline">
1481            
1482            
1483              
1484                
1485                <a class="post-title-link" href="/project/150718.html/" itemprop="url">
1486                  Widget在Dashboard之外的延续
1487                </a>
1488              
1489            
1490          </h1>
1491        
1492
1493        <div class="post-meta">
1494          <span class="post-time">
1495            
1496              <span class="post-meta-item-icon">
1497                <i class="fa fa-calendar-o"></i>
1498              </span>
1499              
1500                <span class="post-meta-item-text">发表于</span>
1501              
1502              <time title="Post created" itemprop="dateCreated datePublished" datetime="2015-07-18T22:23:55+08:00">
1503                2015-07-18
1504              </time>
1505            
1506
1507            
1508
1509            
1510          </span>
1511
1512          
1513            <span class="post-category" >
1514            
1515              <span class="post-meta-divider">|</span>
1516            
1517              <span class="post-meta-item-icon">
1518                <i class="fa fa-folder-o"></i>
1519              </span>
1520              
1521                <span class="post-meta-item-text">分类于</span>
1522              
1523              
1524                <span itemprop="about" itemscope itemtype="http://schema.org/Thing">
1525                  <a href="/categories/project/" itemprop="url" rel="index">
1526                    <span itemprop="name">project</span>
1527                  </a>
1528                </span>
1529
1530                
1531                
1532              
1533            </span>
1534          
1535
1536          
1537            
1538          
1539
1540          
1541
1542          
1543          
1544
1545          
1546
1547          
1548
1549        </div>
1550      </header>
1551    
1552
1553
1554    <div class="post-body" itemprop="articleBody">
1555
1556      
1557      
1558
1559      
1560        
1561          <p>Widget是OSX操作系统中比较古老的一个元素,虽然在目前最新版本的OSX仍然得以保留,但不难发现Apple已经渐渐将它遗忘在一个角落,似乎给它判死刑只是一个迟早的问题。即便如此,在Dashboard中提供的那几个Widget仍然给我们使用Mac提供了很多便利。</p>
1562          <!--noindex-->
1563          <div class="post-more-link text-center">
1564            <a class="btn" href="/project/150718.html/#more" rel="contents">
1565              阅读全文 &raquo;
1566            </a>
1567          </div>
1568          <!--/noindex-->
1569        
1570      
1571    </div>
1572
1573    <div>
1574      
1575    </div>
1576
1577    <div>
1578      
1579    </div>
1580
1581
1582    <footer class="post-footer">
1583      
1584
1585      
1586
1587      
1588      
1589        <div class="post-eof"></div>
1590      
1591    </footer>
1592  </article>
1593
1594
1595    
1596      
1597
1598  
1599
1600  
1601  
1602  
1603
1604  <article class="post post-type-normal " itemscope itemtype="http://schema.org/Article">
1605  <link itemprop="mainEntityOfPage" href="https://www.tanhao.me/code/150608.html/">
1606
1607  <span style="display:none" itemprop="author" itemscope itemtype="http://schema.org/Person">
1608    <meta itemprop="name" content="TanHao">
1609    <meta itemprop="description" content="">
1610    <meta itemprop="image" content="/avatar.jpg">
1611  </span>
1612
1613  <span style="display:none" itemprop="publisher" itemscope itemtype="http://schema.org/Organization">
1614    <meta itemprop="name" content="老谭笔记">
1615    <span style="display:none" itemprop="logo" itemscope itemtype="http://schema.org/ImageObject">
1616      <img style="display:none;" itemprop="url image" alt="老谭笔记" src="">
1617    </span>
1618  </span>
1619
1620    
1621      <header class="post-header">
1622
1623        
1624        
1625          <h1 class="post-title" itemprop="name headline">
1626            
1627            
1628              
1629                
1630                <a class="post-title-link" href="/code/150608.html/" itemprop="url">
1631                  解决NSData中包含非法UTF-8编码
1632                </a>
1633              
1634            
1635          </h1>
1636        
1637
1638        <div class="post-meta">
1639          <span class="post-time">
1640            
1641              <span class="post-meta-item-icon">
1642                <i class="fa fa-calendar-o"></i>
1643              </span>
1644              
1645                <span class="post-meta-item-text">发表于</span>
1646              
1647              <time title="Post created" itemprop="dateCreated datePublished" datetime="2015-06-08T23:01:55+08:00">
1648                2015-06-08
1649              </time>
1650            
1651
1652            
1653
1654            
1655          </span>
1656
1657          
1658            <span class="post-category" >
1659            
1660              <span class="post-meta-divider">|</span>
1661            
1662              <span class="post-meta-item-icon">
1663                <i class="fa fa-folder-o"></i>
1664              </span>
1665              
1666                <span class="post-meta-item-text">分类于</span>
1667              
1668              
1669                <span itemprop="about" itemscope itemtype="http://schema.org/Thing">
1670                  <a href="/categories/code/" itemprop="url" rel="index">
1671                    <span itemprop="name">code</span>
1672                  </a>
1673                </span>
1674
1675                
1676                
1677              
1678            </span>
1679          
1680
1681          
1682            
1683          
1684
1685          
1686
1687          
1688          
1689
1690          
1691
1692          
1693
1694        </div>
1695      </header>
1696    
1697
1698
1699    <div class="post-body" itemprop="articleBody">
1700
1701      
1702      
1703
1704      
1705        
1706          <p>我们开发中常会遇上将NSData转换为NSString,或通过NSJSONSerialization解析JSON的场景,一旦NSData中包含非法的UTF-8编码,那么结果将是返回nil,但这样的结果并不符合我们预期,因为可能这其中仅仅只是一个编码错误,我们更希望将错误编码丢弃或替换为错误字符.<br>在Google上找了一圈,有人也实现了这样的方法,但个人觉得写得不够严谨,容错性也不太好,索性自己写一个吧,严格按照RFC3629的标准.</p>
1707          <!--noindex-->
1708          <div class="post-more-link text-center">
1709            <a class="btn" href="/code/150608.html/#more" rel="contents">
1710              阅读全文 &raquo;
1711            </a>
1712          </div>
1713          <!--/noindex-->
1714        
1715      
1716    </div>
1717
1718    <div>
1719      
1720    </div>
1721
1722    <div>
1723      
1724    </div>
1725
1726
1727    <footer class="post-footer">
1728      
1729
1730      
1731
1732      
1733      
1734        <div class="post-eof"></div>
1735      
1736    </footer>
1737  </article>
1738
1739
1740    
1741  </section>
1742
1743  
1744  <nav class="pagination">
1745    <span class="page-number current">1</span><a class="page-number" href="/page/2/">2</a><span class="space">&hellip;</span><a class="page-number" href="/page/16/">16</a><a class="extend next" rel="next" href="/page/2/"><i class="fa fa-angle-right"></i></a>
1746  </nav>
1747
1748
1749
1750          </div>
1751          
1752
1753
1754          
1755
1756        </div>
1757        
1758          
1759  
1760  <div class="sidebar-toggle">
1761    <div class="sidebar-toggle-line-wrap">
1762      <span class="sidebar-toggle-line sidebar-toggle-line-first"></span>
1763      <span class="sidebar-toggle-line sidebar-toggle-line-middle"></span>
1764      <span class="sidebar-toggle-line sidebar-toggle-line-last"></span>
1765    </div>
1766  </div>
1767
1768  <aside id="sidebar" class="sidebar">
1769    <div class="sidebar-inner">
1770
1771      
1772
1773      
1774
1775      <section class="site-overview sidebar-panel sidebar-panel-active">
1776        <div class="site-author motion-element" itemprop="author" itemscope itemtype="http://schema.org/Person">
1777          <img class="site-author-image" itemprop="image"
1778               src="/avatar.jpg"
1779               alt="TanHao" />
1780          <p class="site-author-name" itemprop="name">TanHao</p>
1781          <p class="site-description motion-element" itemprop="description">程序的世界让我着迷...</p>
1782        </div>
1783        <nav class="site-state motion-element">
1784        
1785          
1786            <div class="site-state-item site-state-posts">
1787              <a href="/archives">
1788                <span class="site-state-item-count">152</span>
1789                <span class="site-state-item-name">日志</span>
1790              </a>
1791            </div>
1792          
1793
1794          
1795            <div class="site-state-item site-state-categories">
1796              
1797                <span class="site-state-item-count">5</span>
1798                <span class="site-state-item-name">分类</span>
1799              
1800            </div>
1801          
1802
1803          
1804            <div class="site-state-item site-state-tags">
1805              <a href="/tags">
1806                <span class="site-state-item-count">87</span>
1807                <span class="site-state-item-name">标签</span>
1808              </a>
1809            </div>
1810          
1811
1812        </nav>
1813
1814        
1815
1816        <div class="links-of-author motion-element">
1817          
1818        </div>
1819
1820        
1821        
1822
1823        
1824        
1825          <div class="links-of-blogroll motion-element links-of-blogroll-inline">
1826            <div class="links-of-blogroll-title">
1827              <i class="fa  fa-fw fa-globe"></i>
1828              
1829            </div>
1830            <ul class="links-of-blogroll-list">
1831              
1832                <li class="links-of-blogroll-item">
1833                  <a href="http://www.weisay.com/blog/" title="威言威语" target="_blank">威言威语</a>
1834                </li>
1835              
1836                <li class="links-of-blogroll-item">
1837                  <a href="http://www.llku.com/" title="路路库" target="_blank">路路库</a>
1838                </li>
1839              
1840                <li class="links-of-blogroll-item">
1841                  <a href="https://www.fourfire.cc/" title="FourFire" target="_blank">FourFire</a>
1842                </li>
1843              
1844                <li class="links-of-blogroll-item">
1845                  <a href="http://maccocoa.com/" title="MacCocoa" target="_blank">MacCocoa</a>
1846                </li>
1847              
1848                <li class="links-of-blogroll-item">
1849                  <a href="http://bbs.cocoachina.com/" title="CocoaChina" target="_blank">CocoaChina</a>
1850                </li>
1851              
1852            </ul>
1853          </div>
1854        
1855
1856        
1857
1858
1859      </section>
1860
1861      
1862
1863    </div>
1864  </aside>
1865
1866
1867        
1868      </div>
1869    </main>
1870
1871    <footer id="footer" class="footer">
1872      <div class="footer-inner">
1873        <div class="copyright" >
1874  
1875  &copy;  2011 - 
1876  <span itemprop="copyrightYear">2017</span>
1877  <span class="with-love">
1878    <i class="fa fa-heart"></i>
1879  </span>
1880  <span class="author" itemprop="copyrightHolder">TanHao</span>
1881  <a class="theme-link" href="http://www.beian.miit.gov.cn/">
1882    <span class="author" itemprop="copyrightHolder"> 蜀ICP备12004580号 </span>
1883  </a>
1884</div>
1885
1886
1887<div class="powered-by">
1888  由 <a class="theme-link" href="https://hexo.io">Hexo</a> 强力驱动
1889</div>
1890
1891<div class="theme-info">
1892  主题 -
1893  <a class="theme-link" href="https://github.com/iissnan/hexo-theme-next">
1894    NexT.Pisces
1895  </a>
1896</div>
1897
1898
1899        
1900
1901        
1902      </div>
1903    </footer>
1904
1905    <div class="back-to-top">
1906      <i class="fa fa-arrow-up"></i>
1907    </div>
1908  </div>
1909
1910  
1911
1912<script type="text/javascript">
1913  if (Object.prototype.toString.call(window.Promise) !== '[object Function]') {
1914    window.Promise = null;
1915  }
1916</script>
1916
1917
1918
1919
1920
1921
1922
1923
1924
1925
1926  
1927
1928
1929
1930  
1931  
1931<script type="text/javascript" src="/lib/jquery/index.js?v=2.1.3"></script>
1931
1932
1933  
1934  
1934<script type="text/javascript" src="/lib/fastclick/lib/fastclick.min.js?v=1.0.6"></script>
1934
1935
1936  
1937  
1937<script type="text/javascript" src="/lib/jquery_lazyload/jquery.lazyload.js?v=1.9.7"></script>
1937
1938
1939  
1940  
1940<script type="text/javascript" src="/lib/velocity/velocity.min.js?v=1.2.1"></script>
1940
1941
1942  
1943  
1943<script type="text/javascript" src="/lib/velocity/velocity.ui.min.js?v=1.2.1"></script>
1943
1944
1945  
1946  
1946<script type="text/javascript" src="/lib/fancybox/source/jquery.fancybox.pack.js?v=2.1.5"></script>
1946
1947
1948
1949  
1950
1951
1952  
1952<script type="text/javascript" src="/js/src/utils.js?v=5.1.0"></script>
1952
1953
1954  
1954<script type="text/javascript" src="/js/src/motion.js?v=5.1.0"></script>
1954
1955
1956
1957
1958  
1959  
1960
1961
1962  
1962<script type="text/javascript" src="/js/src/affix.js?v=5.1.0"></script>
1962
1963
1964  
1964<script type="text/javascript" src="/js/src/schemes/pisces.js?v=5.1.0"></script>
1964
1965
1966
1967
1968  
1969
1970  
1971
1972
1973  
1973<script type="text/javascript" src="/js/src/bootstrap.js?v=5.1.0"></script>
1973
1974
1975
1976
1977  
1978
1979
1980
1981  
1982
1983
1984
1985
1986	
1987
1988
1989
1990
1991
1992  
1993
1994
1995
1996
1997  
1998  
1999
2000  
2001
2002  
2003
2004  
2005
2006  
2007
2008
2009</body>
2010</html>

Line numbers count LF bytes from the start of the resource, as the search results do. Vendor segments are library code the classifier recognised; they are stored but not indexed. Bytes are shown as Latin1 characters, one per byte.