﻿<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:trackback="http://madskills.com/public/xml/rss/module/trackback/" xmlns:wfw="http://wellformedweb.org/CommentAPI/" xmlns:slash="http://purl.org/rss/1.0/modules/slash/"><channel><title>C++博客-面对现实，超越自己</title><link>http://www.cppblog.com/wanghaiguang/</link><description>逆水行舟，不进则退</description><language>zh-cn</language><lastBuildDate>Mon, 06 Apr 2026 04:59:27 GMT</lastBuildDate><pubDate>Mon, 06 Apr 2026 04:59:27 GMT</pubDate><ttl>60</ttl><item><title>SWIG实现python对c++封装</title><link>http://www.cppblog.com/wanghaiguang/archive/2016/08/18/214201.html</link><dc:creator>王海光</dc:creator><author>王海光</author><pubDate>Thu, 18 Aug 2016 03:20:00 GMT</pubDate><guid>http://www.cppblog.com/wanghaiguang/archive/2016/08/18/214201.html</guid><wfw:comment>http://www.cppblog.com/wanghaiguang/comments/214201.html</wfw:comment><comments>http://www.cppblog.com/wanghaiguang/archive/2016/08/18/214201.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/wanghaiguang/comments/commentRss/214201.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/wanghaiguang/services/trackbacks/214201.html</trackback:ping><description><![CDATA[<span style="font-family: Verdana;">一、SWIG环境搭建</span><br /><div>&nbsp; <br /><span style="font-family: Verdana;">&nbsp; &nbsp;1、 下载Swig for Windows：http://www.swig.org/download.html</span></div><div><span style="font-family: Verdana;">&nbsp;&nbsp;&nbsp;2、 解压 .zip 文件到目录，比如：D:\backupsoftware</span></div><div><span style="font-family: Verdana;">&nbsp;&nbsp;&nbsp;3、 添加环境变量到path， 比如： D:\backupsoftware\swigwin-3.0.10</span></div><div><span style="font-family: Verdana;">&nbsp;&nbsp;&nbsp;4、 简单测试安装是否成功：</span></div><div><span style="font-family: Verdana;">&nbsp; &nbsp;打开Dos，在命令行执行： swig --help, 显示 Target Language Options即表明安装成功。</span><br /><br /><span style="font-family: Verdana;">二、以c++为例</span><br /><br /><span style="font-family: Verdana;">1、编写c++源文件</span><br /><div style="background-color:#eeeeee;font-size:13px;border:1px solid #CCCCCC;padding-right: 5px;padding-bottom: 4px;padding-left: 4px;padding-top: 4px;width: 98%;word-break:break-all"><!--<br /><br />Code highlighting produced by Actipro CodeHighlighter (freeware)<br />http://www.CodeHighlighter.com/<br /><br />--><span style="color: #008000; font-family: Verdana;">//</span><span style="color: #008000; font-family: Verdana;">example.h</span><span style="color: #008000; "><br /></span><span style="font-family: Verdana;">#include&nbsp;&lt;iostream&gt;</span><br /><span style="color: #0000ff; font-family: Verdana;">using</span>&nbsp;<span style="color: #0000ff; font-family: Verdana;">namespace</span><span style="font-family: Verdana;">&nbsp;std;</span><br /><span style="color: #0000ff; font-family: Verdana;">class</span><span style="font-family: Verdana;">&nbsp;Example{</span><br /><span style="color: #0000ff; font-family: Verdana;">public</span><span style="font-family: Verdana;">:</span><br /><span style="color: #0000ff; font-family: Verdana;">void</span><span style="font-family: Verdana;">&nbsp;say_hello();</span><br /><span style="font-family: Verdana;">};</span></div><br /><div style="font-size: 13px; border: 1px solid #cccccc; padding: 4px 5px 4px 4px; width: 98%; word-break: break-all; background-color: #eeeeee;"><!--<br /><br />Code highlighting produced by Actipro CodeHighlighter (freeware)<br />http://www.CodeHighlighter.com/<br /><br />--><span style="color: #008000; font-family: Verdana;">//</span><span style="color: #008000; font-family: Verdana;">example.cpp</span><span style="color: #008000; "><br /></span><br /><span style="font-family: Verdana;">#include&nbsp;"example.h"</span><br /><br /><span style="color: #0000ff; font-family: Verdana;">void</span><span style="font-family: Verdana;">&nbsp;Example::say_hello()</span><br /><span style="font-family: Verdana;">{</span><br /><span style="font-family: Verdana;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;printf("hello");</span><br /><span style="font-family: Verdana;">}</span></div><br /><span style="color: #333333; font-family: Verdana; line-height: 26px; background-color: #ffffff;">2、再写一个swig模块定义文件如下<br /></span><div style="background-color:#eeeeee;font-size:13px;border:1px solid #CCCCCC;padding-right: 5px;padding-bottom: 4px;padding-left: 4px;padding-top: 4px;width: 98%;word-break:break-all"><!--<br /><br />Code highlighting produced by Actipro CodeHighlighter (freeware)<br />http://www.CodeHighlighter.com/<br /><br />--><span style="font-family: Verdana;">%module&nbsp;example</span><br /><span style="font-family: Verdana;">%{</span><br /><span style="font-family: Verdana;">#include&nbsp;"example.h"</span><br /><span style="font-family: Verdana;">%}</span><br /><span style="font-family: Verdana;">%include&nbsp;"example.h"</span></div><span style="color: #333333; font-family: Arial; line-height: 26px; background-color: #ffffff;"><br /></span><span style="color: #333333; font-family: Verdana; line-height: 26px; background-color: #ffffff;">3、通过命令行运行：$ swig -python -c++ example.i</span><p style="color: #333333; font-family: Arial; line-height: 26px; background-color: #ffffff;"><span style="font-family: Verdana;">&nbsp; &nbsp; 如果是使用C源码，则选项：$ swig -</span><a href="http://lib.csdn.net/base/11" class="replace_word" title="undefined" target="_blank" style="color: #df3434; text-decoration: none; font-weight: bold;"><span style="font-family: Verdana;">Python</span></a><span style="font-family: Verdana;">&nbsp;example.i</span></p><p style="color: #333333; font-family: Arial; line-height: 26px; background-color: #ffffff;"><span style="font-family: Verdana;">&nbsp; &nbsp; 这样会创建两个不同的文件：example_wrap.cxx（如果用c源码是example_wrap.c），和python文件example.py。</span></p><span style="color: #333333; font-family: Arial; line-height: 26px; background-color: #ffffff;"><br /></span><span style="color: #333333; font-family: Verdana; line-height: 26px; background-color: #ffffff;">4、使用python.distutils生成模块动态库</span><br /><span style="color: #333333; font-family: Verdana; line-height: 25.2px; background-color: #ffffff;">python自带一个distutils工具，可以用它来创建python的扩展模块。使用它也很简单，只需要先定义一个配置文件，通常是命名为setup.py</span><span style="color: #333333; font-family: Verdana; line-height: 26px; background-color: #ffffff;">，如下：</span><br /><div style="background-color:#eeeeee;font-size:13px;border:1px solid #CCCCCC;padding-right: 5px;padding-bottom: 4px;padding-left: 4px;padding-top: 4px;width: 98%;word-break:break-all"><!--<br /><br />Code highlighting produced by Actipro CodeHighlighter (freeware)<br />http://www.CodeHighlighter.com/<br /><br />--><span style="color: #008000; font-family: Verdana;">#</span><span style="color: #008000; font-family: Verdana;">!/usr/bin/env&nbsp;python</span><span style="color: #008000; "><br /></span><br /><span style="color: #800000; font-family: Verdana;">"""</span><span style="color: #800000; "><br /></span><span style="color: #800000; font-family: Verdana;">setup.py&nbsp;file&nbsp;for&nbsp;SWIG&nbsp;C\+\+/Python&nbsp;example<br /></span><span style="color: #800000; font-family: Verdana;">"""</span><br /><span style="color: #0000ff; font-family: Verdana;">from</span><span style="font-family: Verdana;">&nbsp;distutils.core&nbsp;</span><span style="color: #0000ff; font-family: Verdana;">import</span><span style="font-family: Verdana;">&nbsp;setup,&nbsp;Extension</span><br /><span style="font-family: Verdana;">example_module&nbsp;=&nbsp;Extension(</span><span style="color: #800000; font-family: Verdana;">'</span><span style="color: #800000; font-family: Verdana;">_example</span><span style="color: #800000; font-family: Verdana;">'</span><span style="font-family: Verdana;">,</span><br /><span style="font-family: Verdana;">sources=[</span><span style="color: #800000; font-family: Verdana;">'</span><span style="color: #800000; font-family: Verdana;">example.cpp</span><span style="color: #800000; font-family: Verdana;">'</span><span style="font-family: Verdana;">,&nbsp;</span><span style="color: #800000; font-family: Verdana;">'</span><span style="color: #800000; font-family: Verdana;">example_wrap.cxx</span><span style="color: #800000; font-family: Verdana;">'</span><span style="font-family: Verdana;">,],</span><br /><span style="font-family: Verdana;">)</span><br /><span style="font-family: Verdana;">setup&nbsp;(name&nbsp;=&nbsp;</span><span style="color: #800000; font-family: Verdana;">'</span><span style="color: #800000; font-family: Verdana;">example</span><span style="color: #800000; font-family: Verdana;">'</span><span style="font-family: Verdana;">,</span><br /><span style="font-family: Verdana;">version&nbsp;=&nbsp;</span><span style="color: #800000; font-family: Verdana;">'</span><span style="color: #800000; font-family: Verdana;">0.1</span><span style="color: #800000; font-family: Verdana;">'</span><span style="font-family: Verdana;">,</span><br /><span style="font-family: Verdana;">author&nbsp;=&nbsp;</span><span style="color: #800000; font-family: Verdana;">"</span><span style="color: #800000; font-family: Verdana;">www</span><span style="color: #800000; font-family: Verdana;">"</span><span style="font-family: Verdana;">,</span><br /><span style="font-family: Verdana;">description&nbsp;=&nbsp;</span><span style="color: #800000; font-family: Verdana;">"""</span><span style="color: #800000; font-family: Verdana;">Simple&nbsp;swig&nbsp;C\+\+/Python&nbsp;example</span><span style="color: #800000; font-family: Verdana;">"""</span><span style="font-family: Verdana;">,</span><br /><span style="font-family: Verdana;">ext_modules&nbsp;=&nbsp;[example_module],</span><br /><span style="font-family: Verdana;">py_modules&nbsp;=&nbsp;[</span><span style="color: #800000; font-family: Verdana;">"</span><span style="color: #800000; font-family: Verdana;">example</span><span style="color: #800000; font-family: Verdana;">"</span><span style="font-family: Verdana;">],</span><br /><span style="font-family: Verdana;">)</span></div><br /><span style="color: #ff0000; font-family: Verdana; line-height: 26px; background-color: #ffffff;">注：</span><span style="color: #333333; font-family: Verdana; line-height: 26px; background-color: #ffffff;">swig生成的扩展模块对象名必须使用python模块名并在前面加上下划线_，刚才我们通过swig生成的python文件是example.py，所以这里的模块对象名必须是'_example',否则无法顺利编译。</span><br /><br /><span style="margin: 0px; padding: 0px; color: #333333; font-family: Verdana; line-height: 25.2px; background-color: #ffffff;">5、编译<br /></span><span style="font-family: Verdana; line-height: 26px;">命令行中将当前工作目录切换到文件example.cpp,</span><span style="color: #333333; font-family: Verdana; line-height: 26px; background-color: #ffffff;">example_wrap.cxx</span><span style="font-family: Verdana; line-height: 26px;">,example.py,setup.py所在的目录,然后输入以下命令:</span><br /><span style="color: #333333; font-family: Verdana; line-height: 26px; background-color: #ffffff;">python setup.py build_ext --inplace</span><br /><br /><span style="color: #333333; font-family: Verdana; line-height: 25.2px; background-color: #ffffff;">会在本目录下生成_example.pyd模块。<br /><br /></span><span style="font-family: Verdana;">6、测试</span><br /><span style="font-family: Verdana;">import examlpe</span><br /><div><span style="font-family: Verdana;">example.Example().say_hello()</span><br /><br /><span style="color: red; font-family: Verdana;">注</span><span style="font-family: Verdana;">：如果导入模块失败，需要将模块所在路径添加到sys.path中，在次导入就会成功</span><br /><img src="http://www.cppblog.com/images/cppblog_com/wanghaiguang/swig.jpg" width="648" height="223" alt="" /><br /><br /><br /></div></div><img src ="http://www.cppblog.com/wanghaiguang/aggbug/214201.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/wanghaiguang/" target="_blank">王海光</a> 2016-08-18 11:20 <a href="http://www.cppblog.com/wanghaiguang/archive/2016/08/18/214201.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>UISearchBar控件（转载）</title><link>http://www.cppblog.com/wanghaiguang/archive/2015/03/04/209924.html</link><dc:creator>王海光</dc:creator><author>王海光</author><pubDate>Wed, 04 Mar 2015 11:23:00 GMT</pubDate><guid>http://www.cppblog.com/wanghaiguang/archive/2015/03/04/209924.html</guid><wfw:comment>http://www.cppblog.com/wanghaiguang/comments/209924.html</wfw:comment><comments>http://www.cppblog.com/wanghaiguang/archive/2015/03/04/209924.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/wanghaiguang/comments/commentRss/209924.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/wanghaiguang/services/trackbacks/209924.html</trackback:ping><description><![CDATA[&nbsp;&nbsp;&nbsp;&nbsp; 摘要: UISearchBar控件就是要为你完成搜索功能的一个专用控件。它集成了很多你意想不到的功能和特点！首先，还是来普及一下UISearchBar控件API相关的属性和方法吧！UISearchBar属性相关_searchBar&nbsp;= [[UISearchBar&nbsp;alloc]&nbsp;initWithFrame:CGRectZero];//&nbsp;初始化，不解释&nbsp;&nb...&nbsp;&nbsp;<a href='http://www.cppblog.com/wanghaiguang/archive/2015/03/04/209924.html'>阅读全文</a><img src ="http://www.cppblog.com/wanghaiguang/aggbug/209924.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/wanghaiguang/" target="_blank">王海光</a> 2015-03-04 19:23 <a href="http://www.cppblog.com/wanghaiguang/archive/2015/03/04/209924.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>(转载)推荐！国外程序员整理的 C++ 资源大全</title><link>http://www.cppblog.com/wanghaiguang/archive/2014/11/14/208873.html</link><dc:creator>王海光</dc:creator><author>王海光</author><pubDate>Fri, 14 Nov 2014 00:58:00 GMT</pubDate><guid>http://www.cppblog.com/wanghaiguang/archive/2014/11/14/208873.html</guid><wfw:comment>http://www.cppblog.com/wanghaiguang/comments/208873.html</wfw:comment><comments>http://www.cppblog.com/wanghaiguang/archive/2014/11/14/208873.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/wanghaiguang/comments/commentRss/208873.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/wanghaiguang/services/trackbacks/208873.html</trackback:ping><description><![CDATA[&nbsp;&nbsp;&nbsp;&nbsp; 摘要: 标准库C++标准库，包括了STL容器，算法和函数等。C++ Standard Library：是一系列类和函数的集合，使用核心语言编写，也是C++ISO自身标准的一部分。Standard Template Library：标准模板库C POSIX library&nbsp;： POSIX系统的C标准库规范ISO C++ Standards Committee&nbsp;：C++标准委员会&nbsp...&nbsp;&nbsp;<a href='http://www.cppblog.com/wanghaiguang/archive/2014/11/14/208873.html'>阅读全文</a><img src ="http://www.cppblog.com/wanghaiguang/aggbug/208873.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/wanghaiguang/" target="_blank">王海光</a> 2014-11-14 08:58 <a href="http://www.cppblog.com/wanghaiguang/archive/2014/11/14/208873.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>MFC wcslen获取中文长度</title><link>http://www.cppblog.com/wanghaiguang/archive/2014/10/10/208529.html</link><dc:creator>王海光</dc:creator><author>王海光</author><pubDate>Fri, 10 Oct 2014 03:53:00 GMT</pubDate><guid>http://www.cppblog.com/wanghaiguang/archive/2014/10/10/208529.html</guid><wfw:comment>http://www.cppblog.com/wanghaiguang/comments/208529.html</wfw:comment><comments>http://www.cppblog.com/wanghaiguang/archive/2014/10/10/208529.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/wanghaiguang/comments/commentRss/208529.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/wanghaiguang/services/trackbacks/208529.html</trackback:ping><description><![CDATA[<span style="color: #333333; font-family: Arial; line-height: 26px; background-color: #ffffff;">不知道大家有没有我这种体验.大家先看看下面这段代码:</span><br style="color: #333333; font-family: Arial; line-height: 26px; background-color: #ffffff;" /><div style="background-color:#eeeeee;font-size:13px;border:1px solid #CCCCCC;padding-right: 5px;padding-bottom: 4px;padding-left: 4px;padding-top: 4px;width: 98%;word-break:break-all"><!--<br /><br />Code highlighting produced by Actipro CodeHighlighter (freeware)<br />http://www.CodeHighlighter.com/<br /><br />--><span style="color: #0000FF; ">int</span>&nbsp;fp=_wopen(L"Hello.dat",O_BINARY&nbsp;|&nbsp;O_CREAT&nbsp;|&nbsp;O_TRUNC&nbsp;|&nbsp;O_RDWR);<br /><span style="color: #0000FF; ">if</span>(fp==-1)&nbsp;<span style="color: #0000FF; ">return</span>;<br />write(fp,L"123中国人",wcslen(L"123中国人"));<br />close(fp);</div><span style="color: #333333; font-family: Arial; line-height: 26px; background-color: #ffffff;"><br />上面这段代码不知道大家看出什么BUG来了.如果大家看不出毛病也不足为怪,因为这是我们的习惯导致了我们的错误产生.</span><br style="color: #333333; font-family: Arial; line-height: 26px; background-color: #ffffff;" /><br style="color: #333333; font-family: Arial; line-height: 26px; background-color: #ffffff;" /><span style="color: #333333; font-family: Arial; line-height: 26px; background-color: #ffffff;">先让我来分析一下write吧.下面是write的原型:</span><br style="color: #333333; font-family: Arial; line-height: 26px; background-color: #ffffff;" /><span style="color: #333333; font-family: Arial; line-height: 26px; background-color: #ffffff;">int write( int handle, const void *buffer, unsigned int count );</span><br style="color: #333333; font-family: Arial; line-height: 26px; background-color: #ffffff;" /><span style="color: #333333; font-family: Arial; line-height: 26px; background-color: #ffffff;">参数:</span><br style="color: #333333; font-family: Arial; line-height: 26px; background-color: #ffffff;" /><span style="color: #333333; font-family: Arial; line-height: 26px; background-color: #ffffff;">handle&nbsp; &nbsp;已打开或已创建的文件句柄</span><br style="color: #333333; font-family: Arial; line-height: 26px; background-color: #ffffff;" /><span style="color: #333333; font-family: Arial; line-height: 26px; background-color: #ffffff;">buffer&nbsp; &nbsp;&nbsp;&nbsp;待写入的数据</span><br style="color: #333333; font-family: Arial; line-height: 26px; background-color: #ffffff;" /><span style="color: #333333; font-family: Arial; line-height: 26px; background-color: #ffffff;">count&nbsp; &nbsp;&nbsp;&nbsp;待写入的数据大小</span><br style="color: #333333; font-family: Arial; line-height: 26px; background-color: #ffffff;" /><span style="color: #333333; font-family: Arial; line-height: 26px; background-color: #ffffff;">现在分析为什么上面的那代码有bug,其实主要问题就在一个buffer,和count.</span><br style="color: #333333; font-family: Arial; line-height: 26px; background-color: #ffffff;" /><span style="color: #333333; font-family: Arial; line-height: 26px; background-color: #ffffff;">如果我们写入一个Ansi字符串,上面的代码改成相应的形式确实没有错.</span><br style="color: #333333; font-family: Arial; line-height: 26px; background-color: #ffffff;" /><span style="color: #333333; font-family: Arial; line-height: 26px; background-color: #ffffff;">但如果是写入一个宽字符串,那么上面的代码就不严格.原因就在于count.</span><br style="color: #333333; font-family: Arial; line-height: 26px; background-color: #ffffff;" /><br style="color: #333333; font-family: Arial; line-height: 26px; background-color: #ffffff;" /><span style="color: #333333; font-family: Arial; line-height: 26px; background-color: #ffffff;">我们首先看一下strlen和</span><strong style="color: #333333; font-family: Arial; line-height: 26px; background-color: #ffffff;">wcslen</strong><span style="color: #333333; font-family: Arial; line-height: 26px; background-color: #ffffff;">,如果使用strlen,一般情况下,我们直接作为字符串的长度,</span><br style="color: #333333; font-family: Arial; line-height: 26px; background-color: #ffffff;" /><span style="color: #333333; font-family: Arial; line-height: 26px; background-color: #ffffff;">而使用</span><strong style="color: #333333; font-family: Arial; line-height: 26px; background-color: #ffffff;">wcslen</strong><span style="color: #333333; font-family: Arial; line-height: 26px; background-color: #ffffff;">,你会发现,得出的不是字符串的长度而是字符的个数.</span><br style="color: #333333; font-family: Arial; line-height: 26px; background-color: #ffffff;" /><br style="color: #333333; font-family: Arial; line-height: 26px; background-color: #ffffff;" /><span style="color: #333333; font-family: Arial; line-height: 26px; background-color: #ffffff;">这就是问题的所在.一般情况下.char的长度是1,这是用sizeof(char)运算出来的结果.</span><br style="color: #333333; font-family: Arial; line-height: 26px; background-color: #ffffff;" /><span style="color: #333333; font-family: Arial; line-height: 26px; background-color: #ffffff;">len=strlen(str)*sizeof(char);而我们一般情况下,都只用strlen(str)来等价,这就是平时的习惯.</span><br style="color: #333333; font-family: Arial; line-height: 26px; background-color: #ffffff;" /><span style="color: #333333; font-family: Arial; line-height: 26px; background-color: #ffffff;">正是由于这个习惯所引来的问题,这个习惯并不适用于宽字符串.因为</span><strong style="color: #333333; font-family: Arial; line-height: 26px; background-color: #ffffff;">wcslen</strong><span style="color: #333333; font-family: Arial; line-height: 26px; background-color: #ffffff;">(str)*sizeof(wchar_t)并不等于</span><strong style="color: #333333; font-family: Arial; line-height: 26px; background-color: #ffffff;">wcslen</strong><span style="color: #333333; font-family: Arial; line-height: 26px; background-color: #ffffff;">(strl).这就是习惯所引起的错误.</span><br style="color: #333333; font-family: Arial; line-height: 26px; background-color: #ffffff;" /><br style="color: #333333; font-family: Arial; line-height: 26px; background-color: #ffffff;" /><span style="color: #333333; font-family: Arial; line-height: 26px; background-color: #ffffff;">说到这里我想大家都明白了.我在这里把这种习惯称之为不良习惯.所以大家以后在计算字符串长度的时候,千万不能简而简之,一定要len=strlen(str)*sizeof(char),len=</span><strong style="color: #333333; font-family: Arial; line-height: 26px; background-color: #ffffff;">wcslen</strong><span style="color: #333333; font-family: Arial; line-height: 26px; background-color: #ffffff;">(str)*sizeof(wchar_t).</span><br style="color: #333333; font-family: Arial; line-height: 26px; background-color: #ffffff;" /><span style="color: #333333; font-family: Arial; line-height: 26px; background-color: #ffffff;">不要再犯这种习惯性的低级错误.<br /><br /></span>本文转自：<a href="http://blog.csdn.net/aylixuan/article/details/6130820">http://blog.csdn.net/aylixuan/article/details/6130820</a><img src ="http://www.cppblog.com/wanghaiguang/aggbug/208529.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/wanghaiguang/" target="_blank">王海光</a> 2014-10-10 11:53 <a href="http://www.cppblog.com/wanghaiguang/archive/2014/10/10/208529.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>Gloox文件传输小记</title><link>http://www.cppblog.com/wanghaiguang/archive/2014/09/02/208206.html</link><dc:creator>王海光</dc:creator><author>王海光</author><pubDate>Tue, 02 Sep 2014 09:18:00 GMT</pubDate><guid>http://www.cppblog.com/wanghaiguang/archive/2014/09/02/208206.html</guid><wfw:comment>http://www.cppblog.com/wanghaiguang/comments/208206.html</wfw:comment><comments>http://www.cppblog.com/wanghaiguang/archive/2014/09/02/208206.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/wanghaiguang/comments/commentRss/208206.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/wanghaiguang/services/trackbacks/208206.html</trackback:ping><description><![CDATA[<span style="font-family: Verdana; font-size: 14pt;">使用版本：1.1.10</span><br /><br /><span style="font-size: 14pt; font-family: Verdana;">今天弄了一下Gloox中自带的收发文件例子，收发文件的例子都是好使的，只不过，在调试过程中需要注意一些问题，下面将我遇到的问题做个记录（例子中以In-Band Bytestreams方式收发）</span><span style="font-size: 14pt; font-family: Verdana;">。</span><br /><br /><span style="font-size: 14pt; font-family: Verdana;"><strong>1、发送文件过程中遇到404错误</strong></span><br /><div style="background-color:#eeeeee;font-size:13px;border:1px solid #CCCCCC;padding-right: 5px;padding-bottom: 4px;padding-left: 4px;padding-top: 4px;width: 98%;word-break:break-all"><!--<br /><br />Code highlighting produced by Actipro CodeHighlighter (freeware)<br />http://www.CodeHighlighter.com/<br /><br />--><span style="color: #0000ff; font-family: Verdana;">&lt;</span><span style="color: #800000; font-family: Verdana;">iq&nbsp;</span><span style="color: #ff0000; font-family: Verdana;">type</span><span style="color: #0000ff; font-family: Verdana;">='error'&nbsp;</span><span style="color: #ff0000; font-family: Verdana;">id</span><span style="color: #0000ff; font-family: Verdana;">='uid-8509a748-00000005'&nbsp;</span><span style="color: #ff0000; font-family: Verdana;">to</span><span style="color: #0000ff; font-family: Verdana;">='wanghaiguang@wanghaiguang-wk/glooxsendfile'from='www@192.168.60.67/Spark&nbsp;</span><span style="color: #ff0000; font-family: Verdana;">2.6.3'</span><span style="color: #0000ff; font-family: Verdana;">&gt;&lt;</span><span style="color: #800000; font-family: Verdana;">sixmlns</span><span style="color: #0000ff; font-family: Verdana;">='http://jabber.org/protocol/si'&nbsp;</span><span style="color: #ff0000; font-family: Verdana;">id</span><span style="color: #0000ff; font-family: Verdana;">='uid-8509a748-00000006'&nbsp;</span><span style="color: #ff0000; font-family: Verdana;">profile</span><span style="color: #0000ff; font-family: Verdana;">='http://jabber.org/protocol/si/profile/file-transfer'&gt;&lt;file&nbsp;</span><span style="color: #ff0000; font-family: Verdana;">xmlns</span><span style="color: #0000ff; font-family: Verdana;">='http://jabber.org/protocol/si/profile/file-transfer'&nbsp;</span><span style="color: #ff0000; font-family: Verdana;">name</span><span style="color: #0000ff; font-family: Verdana;">='d:\offline.bmp'&nbsp;</span><span style="color: #ff0000; font-family: Verdana;">size</span><span style="color: #0000ff; font-family: Verdana;">='6998'/&gt;&lt;feature&nbsp;</span><span style="color: #ff0000; font-family: Verdana;">xmlns</span><span style="color: #0000ff; font-family: Verdana;">='http://jabber.org/protocol/feature-neg'&gt;&lt;x&nbsp;</span><span style="color: #ff0000; font-family: Verdana;">xmlns</span><span style="color: #0000ff; font-family: Verdana;">='jabber:x:data'&nbsp;</span><span style="color: #ff0000; font-family: Verdana;">type</span><span style="color: #0000ff; font-family: Verdana;">='form'&gt;&lt;field&nbsp;</span><span style="color: #ff0000; font-family: Verdana;">type</span><span style="color: #0000ff; font-family: Verdana;">='list-single'var='stream-method'&gt;&lt;option&nbsp;</span><span style="color: #ff0000; font-family: Verdana;">label</span><span style="color: #0000ff; font-family: Verdana;">='ibb'&gt;&lt;value&gt;http://jabber.org/protocol/ibb&lt;/value&gt;&lt;/option&gt;&lt;option&nbsp;</span><span style="color: #ff0000; font-family: Verdana;">label</span><span style="color: #0000ff; font-family: Verdana;">='oob'&gt;&lt;value&gt;jabber:iq:oob&lt;/value&gt;&lt;/option&gt;&lt;option&nbsp;</span><span style="color: #ff0000; font-family: Verdana;">label</span><span style="color: #0000ff; font-family: Verdana;">='s5b'&gt;&lt;value&gt;http://jabber.org/protocol/bytestreams&lt;/value&gt;&lt;/option&gt;&lt;value/&gt;&lt;/field&gt;&lt;/x&gt;&lt;/feature&gt;&lt;/si&gt;&lt;error&nbsp;</span><span style="color: #ff0000; font-family: Verdana;">code</span><span style="color: #0000ff; font-family: Verdana;">='404'&nbsp;</span><span style="color: #ff0000; font-family: Verdana;">type</span><span style="color: #0000ff; font-family: Verdana;">='cancel'&gt;&lt;remote-server-not-found&nbsp;</span><span style="color: #ff0000; font-family: Verdana;">xmlns</span><span style="color: #0000ff; font-family: Verdana;">='urn:ietf:params:xml:ns:xmpp-stanzas'/&gt;&lt;/error&gt;&lt;/iq&gt;</span></div><br /><span style="font-size: 14pt; font-family: Verdana;">可以将ip地址换成服务器名称试试</span><br /><div style="background-color:#eeeeee;font-size:13px;border:1px solid #CCCCCC;padding-right: 5px;padding-bottom: 4px;padding-left: 4px;padding-top: 4px;width: 98%;word-break:break-all"><!--<br /><br />Code highlighting produced by Actipro CodeHighlighter (freeware)<br />http://www.CodeHighlighter.com/<br /><br />--><span style="color: #0000ff; font-family: Verdana;">JID</span><span style="font-family: Verdana;">&nbsp;j(&nbsp;"www@192.168.60.67/gloox"&nbsp;);&#8212;&#8212;&gt;&nbsp;</span><span style="color: #0000ff; font-family: Verdana;">JID&nbsp;</span><span style="font-family: Verdana;">j(&nbsp;"www@wanghaiguang-wk/gloox"&nbsp;);</span></div><div></div><strong style="font-size: 14pt; font-family: Verdana;"><br />2、</strong><strong style="font-family: Verdana; font-size: 18.66666603088379px;">发送文件过程中遇到</strong><strong style="font-size: 14pt; font-family: Verdana;">503错误</strong><br /><div style="background-color:#eeeeee;font-size:13px;border:1px solid #CCCCCC;padding-right: 5px;padding-bottom: 4px;padding-left: 4px;padding-top: 4px;width: 98%;word-break:break-all"><!--<br /><br />Code highlighting produced by Actipro CodeHighlighter (freeware)<br />http://www.CodeHighlighter.com/<br /><br />--><span style="color: #0000ff; font-family: Verdana;">&lt;</span><span style="color: #800000; font-family: Verdana;">iq&nbsp;</span><span style="color: #ff0000; font-family: Verdana;">type</span><span style="color: #0000ff; font-family: Verdana;">='error'&nbsp;</span><span style="color: #ff0000; font-family: Verdana;">id</span><span style="color: #0000ff; font-family: Verdana;">='uid-8663a748-00000005'&nbsp;</span><span style="color: #ff0000; font-family: Verdana;">from</span><span style="color: #0000ff; font-family: Verdana;">='www@wanghaiguang-wk/glooxsend'to='wanghaiguang@wanghaiguang-wk/glooxsendfile'&gt;&lt;si&nbsp;</span><span style="color: #ff0000; font-family: Verdana;">xmlns</span><span style="color: #0000ff; font-family: Verdana;">='http://jabber.org/protocol/si'&nbsp;</span><span style="color: #ff0000; font-family: Verdana;">id</span><span style="color: #0000ff; font-family: Verdana;">='uid-8663a748-00000006'&nbsp;</span><span style="color: #ff0000; font-family: Verdana;">profile</span><span style="color: #0000ff; font-family: Verdana;">='http://jabber.org/protocol/si/profile/file-transfer'&gt;&lt;file&nbsp;</span><span style="color: #ff0000; font-family: Verdana;">xmlns</span><span style="color: #0000ff; font-family: Verdana;">='http://jabber.org/protocol/si/profile/file-transfer'&nbsp;</span><span style="color: #ff0000; font-family: Verdana;">name</span><span style="color: #0000ff; font-family: Verdana;">='d:\offline.bmp'&nbsp;</span><span style="color: #ff0000; font-family: Verdana;">size</span><span style="color: #0000ff; font-family: Verdana;">='6998'/&gt;&lt;feature&nbsp;</span><span style="color: #ff0000; font-family: Verdana;">xmlns</span><span style="color: #0000ff; font-family: Verdana;">='http://jabber.org/protocol/feature-neg'&gt;&lt;x&nbsp;</span><span style="color: #ff0000; font-family: Verdana;">xmlns</span><span style="color: #0000ff; font-family: Verdana;">='jabber:x:data'&nbsp;</span><span style="color: #ff0000; font-family: Verdana;">type</span><span style="color: #0000ff; font-family: Verdana;">='form'&gt;&lt;field&nbsp;</span><span style="color: #ff0000; font-family: Verdana;">type</span><span style="color: #0000ff; font-family: Verdana;">='list-single'&nbsp;</span><span style="color: #ff0000; font-family: Verdana;">var</span><span style="color: #0000ff; font-family: Verdana;">='stream-method'&gt;&lt;option&nbsp;</span><span style="color: #ff0000; font-family: Verdana;">label</span><span style="color: #0000ff; font-family: Verdana;">='ibb'&gt;&lt;value&gt;http://jabber.org/protocol/ibb&lt;/value&gt;&lt;/option&gt;&lt;option&nbsp;</span><span style="color: #ff0000; font-family: Verdana;">label</span><span style="color: #0000ff; font-family: Verdana;">='oob'&gt;&lt;value&gt;jabber:iq:oob&lt;/value&gt;&lt;/option&gt;&lt;option&nbsp;</span><span style="color: #ff0000; font-family: Verdana;">label</span><span style="color: #0000ff; font-family: Verdana;">='s5b'&gt;&lt;value&gt;http://jabber.org/protocol/bytestreams&lt;/value&gt;&lt;/option&gt;&lt;value/&gt;&lt;/field&gt;&lt;/x&gt;&lt;/feature&gt;&lt;/si&gt;&lt;error&nbsp;</span><span style="color: #ff0000; font-family: Verdana;">code</span><span style="color: #0000ff; font-family: Verdana;">='503'&nbsp;</span><span style="color: #ff0000; font-family: Verdana;">type</span><span style="color: #0000ff; font-family: Verdana;">='cancel'&gt;&lt;service-unavailable&nbsp;</span><span style="color: #ff0000; font-family: Verdana;">xmlns</span><span style="color: #0000ff; font-family: Verdana;">='urn:ietf:params:xml:ns:xmpp-stanzas'/&gt;&lt;/error&gt;&lt;/iq&gt;</span></div><br /><span style="font-size: 14pt; font-family: Verdana;">这个问题可能是由于你接收端的资源名称与发送端</span><span style="line-height: 21px; background-color: #eeeeee; font-size: 14pt; font-family: Verdana;">不匹配</span><br /><div style="background-color:#eeeeee;font-size:13px;border:1px solid #CCCCCC;padding-right: 5px;padding-bottom: 4px;padding-left: 4px;padding-top: 4px;width: 98%;word-break:break-all"><span style="font-size: 13px; color: #008000; font-family: Verdana;">//</span><span style="font-size: 13px; color: #008000; font-family: Verdana;">接收端登录的jid</span><br /><span style="color: #0000ff; font-family: Verdana;">JID</span><span style="font-family: Verdana;">&nbsp;jid(&nbsp;"www@192.168.60.67/glooxsendfile"&nbsp;);</span><br /><span style="font-family: Verdana;">&nbsp;j&nbsp;=&nbsp;</span><span style="color: #0000ff; font-family: Verdana;">new</span><span style="font-family: Verdana;">&nbsp;Client(&nbsp;jid,&nbsp;"111"&nbsp;);</span><br /><br /><span style="color: #008000; font-family: Verdana;">//</span><span style="color: #008000; font-family: Verdana;">发送端的jid名称（发送给对方的jid名称）</span><span style="color: #008000; "><br /></span><span style="color: #0000ff; font-family: Verdana;">JID</span><span style="font-family: Verdana;">&nbsp;j(&nbsp;"www@wanghaiguang-wk/gloox"&nbsp;);</span><br /><span style="color: #0000ff; font-family: Verdana;">if</span><span style="font-family: Verdana;">(&nbsp;j.resource().empty()&nbsp;)</span><br /><span style="font-family: Verdana;">{</span><br /><span style="font-family: Verdana;">&nbsp; &nbsp; &nbsp;printf(&nbsp;"error:&nbsp;need&nbsp;full&nbsp;jid\n"&nbsp;);</span><br />&nbsp; &nbsp; &nbsp;<span style="color: #0000ff; font-family: Verdana;">return</span><span style="font-family: Verdana;">&nbsp;1;</span><br /><span style="font-size: 13px; font-family: Verdana;">}</span></div><img src ="http://www.cppblog.com/wanghaiguang/aggbug/208206.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/wanghaiguang/" target="_blank">王海光</a> 2014-09-02 17:18 <a href="http://www.cppblog.com/wanghaiguang/archive/2014/09/02/208206.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title> GLOOX 1.0.10注册问题</title><link>http://www.cppblog.com/wanghaiguang/archive/2014/08/28/208165.html</link><dc:creator>王海光</dc:creator><author>王海光</author><pubDate>Thu, 28 Aug 2014 09:59:00 GMT</pubDate><guid>http://www.cppblog.com/wanghaiguang/archive/2014/08/28/208165.html</guid><wfw:comment>http://www.cppblog.com/wanghaiguang/comments/208165.html</wfw:comment><comments>http://www.cppblog.com/wanghaiguang/archive/2014/08/28/208165.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/wanghaiguang/comments/commentRss/208165.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/wanghaiguang/services/trackbacks/208165.html</trackback:ping><description><![CDATA[<p style="margin: 0px; padding: 0px; font-family: Arial; font-size: 14px; line-height: 26px; background-color: #ffffff;"><strong style="font-size: 14pt; font-family: Verdana;">引文：</strong></p><p style="margin: 0px; padding: 0px; font-family: Arial; font-size: 14px; line-height: 26px; background-color: #ffffff;"><span style="font-size: 14pt; font-family: Verdana;">调试GLOOX 1.0.10的注册功能颇费了一些功夫。总体逻辑如GLOOX自带的例子一样是毫无疑问的，但是照搬例子又是不能完成注册的，返回错误码为</span><strong style="font-size: 14pt; font-family: Verdana;">4------RegistrationBadRequest</strong>。<span style="font-size: 14pt;">笔者一开始</span><span style="font-size: 14pt;">在网上狂搜解决方案，资料少之又少，有建议重写Client::handleNormalNode函数（目的是禁止SASL认证）的，有直接继承Client重写Client::handleNormalNode函数的，但都没说到点子上。经过一段时间的研究，在GLOOX的</span><strong><a href="http://camaya.net/gloox/list/dev/" target="_blank" style="color: #ca0000; text-decoration: none;"><span style="font-size: 14pt;">maillist</span></a></strong><span style="font-size: 14pt;">上得到启发，顺利完成注册。现将解决方案记录下来：</span></p><p style="margin: 0px; padding: 0px; font-family: Arial; font-size: 14px; line-height: 26px; background-color: #ffffff;"><br /></p><p style="margin: 0px; padding: 0px; font-family: Arial; font-size: 14px; line-height: 26px; background-color: #ffffff;"><strong style="font-size: 14pt; font-family: Verdana;">环境</strong></p><p style="margin: 0px; padding: 0px; font-family: Arial; font-size: 14px; line-height: 26px; background-color: #ffffff;"><span style="font-size: 14pt; font-family: Verdana;">客户端：GLOOX1.0.1.0 VS2008</span></p><p style="margin: 0px; padding: 0px; font-family: Arial; font-size: 14px; line-height: 26px; background-color: #ffffff;"><span style="font-size: 14pt; font-family: Verdana;">服务器：OPENFIRE 默认安装</span></p><p style="margin: 0px; padding: 0px; font-family: Arial; font-size: 14px; line-height: 26px; background-color: #ffffff;"><br /></p><p style="margin: 0px; padding: 0px; font-family: Arial; font-size: 14px; line-height: 26px; background-color: #ffffff;"><span style="font-size: 14pt; font-family: Verdana;">对于GLOOX自带的注册例子不能正常注册的问题有人在邮件列表里提出来。一个哥们这样回答：<br /></span></p><div style="background-color: #eeeeee; font-size: 13px; border: 1px solid #cccccc; padding: 4px 5px 4px 4px; width: 98%; word-break: break-all;"><!--<br /><br />Code highlighting produced by Actipro CodeHighlighter (freeware)<br />http://www.CodeHighlighter.com/<br /><br />--><span style="font-size: 14pt; font-family: Verdana;">Ok,&nbsp;I'</span><span style="font-size: 14pt; font-family: Verdana;">ve&nbsp;found&nbsp;what&nbsp;the&nbsp;problem&nbsp;was&nbsp;</span><br /><span style="font-size: 14pt; font-family: Verdana;">In&nbsp;openFire&nbsp;server&nbsp;parameters,&nbsp;Anonymous&nbsp;Login&nbsp;</span><span style="font-size: 14pt; font-family: Verdana;">=&gt;</span><span style="font-size: 14pt; font-family: Verdana;">&nbsp;Disabled&nbsp;</span><span style="font-size: 14pt; font-family: Verdana;">!!!</span>&nbsp;</div><span style="font-size: 14px;"><br /></span><span style="font-size: 14pt; font-family: Verdana;">意思是要</span><strong style="font-size: 14pt; font-family: Verdana;">禁用openFire服务器里的选项&#8221;注册和登录&#8220;的&#8221;匿名登录&#8220;项</strong><span style="font-size: 14pt; font-family: Verdana;">。</span><p style="margin: 0px; padding: 0px; font-size: 14pt; font-family: Verdana;"><span style="font-size: 14pt;">笔者按此说明禁用该选项，果然注册成功。</span></p><p style="margin: 0px; padding: 0px; font-size: 14pt; font-family: Verdana;">这说明开始的注册失败是和匿名登录有关系的。我们来看一下引用registration_expmple例子登录失败时的XML流：</p><p style="margin: 0px; padding: 0px; font-size: 14pt; font-family: Verdana;"><strong>S-&gt;C：服务器返回给客户端支持的认证机制：<br /></strong></p><div style="background-color:#eeeeee;font-size:13px;border:1px solid #CCCCCC;padding-right: 5px;padding-bottom: 4px;padding-left: 4px;padding-top: 4px;width: 98%;word-break:break-all"><!--<br /><br />Code highlighting produced by Actipro CodeHighlighter (freeware)<br />http://www.CodeHighlighter.com/<br /><br />--><span style="color: #0000FF; ">&lt;</span><span style="color: #800000; ">stream:features&nbsp;</span><span style="color: #FF0000; ">xmlns:stream</span><span style="color: #0000FF; ">='http://etherx.jabber.org/streams'&gt;&lt;mechanisms&nbsp;</span><span style="color: #FF0000; ">xmlns</span><span style="color: #0000FF; ">='urn:ietf:params:xml:ns:xmpp-sasl'&gt;&lt;mechanism&gt;DIGEST-MD5&lt;/mechanism&gt;&lt;mechanism&gt;PLAIN&lt;/mechanism&gt;&lt;mechanism&gt;ANONYMOUS&lt;/mechanism&gt;&lt;mechanism&gt;CRAM-MD5&lt;/mechanism&gt;&lt;/mechanisms&gt;&lt;compression&nbsp;</span><span style="color: #FF0000; ">xmlns</span><span style="color: #0000FF; ">='http://jabber.org/features/compress'&gt;&lt;method&gt;zlib&lt;/method&gt;&lt;/compression&gt;&lt;auth&nbsp;</span><span style="color: #FF0000; ">xmlns</span><span style="color: #0000FF; ">='http://jabber.org/features/iq-auth'/&gt;&lt;register&nbsp;</span><span style="color: #FF0000; ">xmlns</span><span style="color: #0000FF; ">='http://jabber.org/features/iq-register'/&gt;&lt;/stream:features&gt;&nbsp;</span></div><p>&nbsp;</p><p style="margin: 0px; padding: 0px; font-size: 14pt; font-family: Verdana;">从上面XML流中我们可以看到，默认openFire支持四种认证机制，分别是：DIGEST-MD5、PLAIN、ANONYMOUS、CRAM-MD5。然后我们看GLOOX客户端的响应流：</p><p style="margin: 0px; padding: 0px; font-size: 14pt; font-family: Verdana;"><strong>C-&gt;S：客户端返回选择的认证方式：<br /></strong></p><div style="background-color:#eeeeee;font-size:13px;border:1px solid #CCCCCC;padding-right: 5px;padding-bottom: 4px;padding-left: 4px;padding-top: 4px;width: 98%;word-break:break-all"><!--<br /><br />Code highlighting produced by Actipro CodeHighlighter (freeware)<br />http://www.CodeHighlighter.com/<br /><br />--><span style="color: #0000FF; ">&lt;</span><span style="color: #800000; ">auth&nbsp;</span><span style="color: #FF0000; ">xmlns</span><span style="color: #0000FF; ">='urn:ietf:params:xml:ns:xmpp-sasl'&nbsp;</span><span style="color: #FF0000; ">mechanism</span><span style="color: #0000FF; ">='ANONYMOUS'</span><span style="color: #0000FF; ">/&gt;</span></div><span style="font-size: 14pt;"><br />可以看出，客户端&#8221;无耻&#8220;的选择了&#8221;匿名&#8220;--</span><strong style="font-size: 14pt;">'ANONYMOUS'方式</strong><br style="font-size: 14pt;" /><p style="margin: 0px; padding: 0px; font-size: 14pt;">接下来的流程就是客户端&#8221;无耻&#8220;的选择了以匿名的方式登录了服务器，然后再发送注册请求，请求如下：</p><div style="background-color:#eeeeee;font-size:13px;border:1px solid #CCCCCC;padding-right: 5px;padding-bottom: 4px;padding-left: 4px;padding-top: 4px;width: 98%;word-break:break-all"><!--<br /><br />Code highlighting produced by Actipro CodeHighlighter (freeware)<br />http://www.CodeHighlighter.com/<br /><br />--><span style="color: #0000FF; ">&lt;</span><span style="color: #800000; ">iq&nbsp;</span><span style="color: #FF0000; ">id</span><span style="color: #0000FF; ">='uid:4e69eccd:00006784'&nbsp;</span><span style="color: #FF0000; ">type</span><span style="color: #0000FF; ">='set'&nbsp;</span><span style="color: #FF0000; ">from</span><span style="color: #0000FF; ">='447e0585@zxl/447e0585'&nbsp;</span><span style="color: #FF0000; ">xmlns</span><span style="color: #0000FF; ">='jabber:client'</span><span style="color: #0000FF; ">&gt;&lt;</span><span style="color: #800000; ">query&nbsp;</span><span style="color: #FF0000; ">xmlns</span><span style="color: #0000FF; ">='jabber:iq:register'</span><span style="color: #0000FF; ">&gt;&lt;</span><span style="color: #800000; ">username</span><span style="color: #0000FF; ">&gt;</span>bbaxiao<span style="color: #0000FF; ">&lt;/</span><span style="color: #800000; ">username</span><span style="color: #0000FF; ">&gt;&lt;</span><span style="color: #800000; ">password</span><span style="color: #0000FF; ">&gt;</span>123456<span style="color: #0000FF; ">&lt;/</span><span style="color: #800000; ">password</span><span style="color: #0000FF; ">&gt;&lt;</span><span style="color: #800000; ">name</span><span style="color: #0000FF; ">&gt;</span>test2<span style="color: #0000FF; ">&lt;/</span><span style="color: #800000; ">name</span><span style="color: #0000FF; ">&gt;&lt;</span><span style="color: #800000; ">email</span><span style="color: #0000FF; ">&gt;</span>163@gmail.com<span style="color: #0000FF; ">&lt;/</span><span style="color: #800000; ">email</span><span style="color: #0000FF; ">&gt;&lt;/</span><span style="color: #800000; ">query</span><span style="color: #0000FF; ">&gt;&lt;/</span><span style="color: #800000; ">iq</span><span style="color: #0000FF; ">&gt;</span>&nbsp;</div><strong><br /></strong><p style="margin: 0px; padding: 0px; font-size: 14px;"><span style="font-size: 14pt;">我们看到，IQ节里包含&#8220;form&#8221;属性，即客户端匿名身份标识。</span></p><p style="margin: 0px; padding: 0px; font-size: 14px;"><span style="font-size: 14pt;">注意，一个客户端已经以一个身份（由服务器临时分配的一个JID）登录，建立了会话，在服务器上我们会看到这个会话，并且服务器发送心跳一直维护这个会话。这种情况下，这个客户端再发送注册请求（另一个身份）建立与服务器的连接是不被允许的。具体请参考XEP-0077（In-Band Registration）：我们关注这两段：</span><br /></p><div style="background-color:#eeeeee;font-size:13px;border:1px solid #CCCCCC;padding-right: 5px;padding-bottom: 4px;padding-left: 4px;padding-top: 4px;width: 98%;word-break:break-all"><!--<br /><br />Code highlighting produced by Actipro CodeHighlighter (freeware)<br />http://www.CodeHighlighter.com/<br /><br />-->If&nbsp;the&nbsp;entity&nbsp;cancels&nbsp;its&nbsp;registration&nbsp;with&nbsp;its&nbsp;"home"&nbsp;server&nbsp;(i.e.,&nbsp;the&nbsp;server&nbsp;at&nbsp;which&nbsp;it&nbsp;has&nbsp;maintained&nbsp;its&nbsp;XMPP&nbsp;account),&nbsp;then&nbsp;the&nbsp;entity&nbsp;SHOULD&nbsp;NOT&nbsp;include&nbsp;a&nbsp;'from'&nbsp;or&nbsp;'to'&nbsp;address&nbsp;<span style="color: #0000FF; ">in</span>&nbsp;the&nbsp;remove&nbsp;request&nbsp;the&nbsp;server&nbsp;SHOULD&nbsp;then&nbsp;<span style="color: #0000FF; ">return</span>&nbsp;a&nbsp;&lt;not-authorized/&gt;&nbsp;stream&nbsp;error&nbsp;and&nbsp;terminate&nbsp;all&nbsp;active&nbsp;sessions&nbsp;<span style="color: #0000FF; ">for</span>&nbsp;the&nbsp;entity.&nbsp;The&nbsp;server&nbsp;SHOULD&nbsp;perform&nbsp;the&nbsp;remove&nbsp;based&nbsp;on&nbsp;the&nbsp;bare&nbsp;JID&nbsp;&lt;localpart@domain.tld&gt;&nbsp;associated&nbsp;with&nbsp;the&nbsp;current&nbsp;session&nbsp;or&nbsp;connection&nbsp;over&nbsp;which&nbsp;it&nbsp;received&nbsp;the&nbsp;remove&nbsp;request.&nbsp;If&nbsp;the&nbsp;server&nbsp;<span style="color: #0000FF; ">is</span>&nbsp;an&nbsp;instant&nbsp;messaging&nbsp;and&nbsp;presence&nbsp;server&nbsp;that&nbsp;conforms&nbsp;to&nbsp;XMPP&nbsp;IM&nbsp;[8],&nbsp;the&nbsp;server&nbsp;SHOULD&nbsp;also&nbsp;cancel&nbsp;all&nbsp;existing&nbsp;presence&nbsp;subscriptions&nbsp;related&nbsp;to&nbsp;that&nbsp;entity&nbsp;(<span style="color: #0000FF; ">as</span>&nbsp;stored&nbsp;<span style="color: #0000FF; ">in</span>&nbsp;the&nbsp;entity's&nbsp;roster).&nbsp;<br />&nbsp;<br />If&nbsp;the&nbsp;entity&nbsp;cancels&nbsp;its&nbsp;registration&nbsp;with&nbsp;a&nbsp;service&nbsp;other&nbsp;than&nbsp;its&nbsp;home&nbsp;server,&nbsp;its&nbsp;home&nbsp;server&nbsp;MUST&nbsp;stamp&nbsp;a&nbsp;'from'&nbsp;address&nbsp;on&nbsp;the&nbsp;remove&nbsp;request,&nbsp;which&nbsp;<span style="color: #0000FF; ">in</span>&nbsp;accordance&nbsp;with&nbsp;XMPP&nbsp;Core&nbsp;will&nbsp;be&nbsp;the&nbsp;entity's&nbsp;full&nbsp;JID&nbsp;&lt;localpart@domain.tld/resource&gt;.&nbsp;The&nbsp;service&nbsp;MUST&nbsp;perform&nbsp;the&nbsp;remove&nbsp;based&nbsp;on&nbsp;the&nbsp;bare&nbsp;JID&nbsp;&lt;localpart@domain.tld&gt;&nbsp;portion&nbsp;of&nbsp;the&nbsp;'from'&nbsp;address.&nbsp;</div><br /><div style="background-color:#eeeeee;font-size:13px;border:1px solid #CCCCCC;padding-right: 5px;padding-bottom: 4px;padding-left: 4px;padding-top: 4px;width: 98%;word-break:break-all"><!--<br /><br />Code highlighting produced by Actipro CodeHighlighter (freeware)<br />http://www.CodeHighlighter.com/<br /><br />-->If&nbsp;the&nbsp;entity&nbsp;cancels&nbsp;its&nbsp;registration&nbsp;with&nbsp;its&nbsp;"home"&nbsp;server&nbsp;(i.e.,&nbsp;the&nbsp;server&nbsp;at&nbsp;which&nbsp;it&nbsp;has&nbsp;maintained&nbsp;its&nbsp;XMPP&nbsp;account),&nbsp;then&nbsp;the&nbsp;entity&nbsp;SHOULD&nbsp;NOT&nbsp;include&nbsp;a&nbsp;'from'&nbsp;or&nbsp;'to'&nbsp;address&nbsp;<span style="color: #0000FF; ">in</span>&nbsp;the&nbsp;remove&nbsp;request&nbsp;the&nbsp;server&nbsp;SHOULD&nbsp;then&nbsp;<span style="color: #0000FF; ">return</span>&nbsp;a&nbsp;&lt;not-authorized/&gt;&nbsp;stream&nbsp;error&nbsp;and&nbsp;terminate&nbsp;all&nbsp;active&nbsp;sessions&nbsp;<span style="color: #0000FF; ">for</span>&nbsp;the&nbsp;entity.&nbsp;The&nbsp;server&nbsp;SHOULD&nbsp;perform&nbsp;the&nbsp;remove&nbsp;based&nbsp;on&nbsp;the&nbsp;bare&nbsp;JID&nbsp;&lt;localpart@domain.tld&gt;&nbsp;associated&nbsp;with&nbsp;the&nbsp;current&nbsp;session&nbsp;or&nbsp;connection&nbsp;over&nbsp;which&nbsp;it&nbsp;received&nbsp;the&nbsp;remove&nbsp;request.&nbsp;If&nbsp;the&nbsp;server&nbsp;<span style="color: #0000FF; ">is</span>&nbsp;an&nbsp;instant&nbsp;messaging&nbsp;and&nbsp;presence&nbsp;server&nbsp;that&nbsp;conforms&nbsp;to&nbsp;XMPP&nbsp;IM&nbsp;[8],&nbsp;the&nbsp;server&nbsp;SHOULD&nbsp;also&nbsp;cancel&nbsp;all&nbsp;existing&nbsp;presence&nbsp;subscriptions&nbsp;related&nbsp;to&nbsp;that&nbsp;entity&nbsp;(<span style="color: #0000FF; ">as</span>&nbsp;stored&nbsp;<span style="color: #0000FF; ">in</span>&nbsp;the&nbsp;entity's&nbsp;roster).&nbsp;&nbsp;<br />&nbsp;&nbsp;<br />If&nbsp;the&nbsp;entity&nbsp;cancels&nbsp;its&nbsp;registration&nbsp;with&nbsp;a&nbsp;service&nbsp;other&nbsp;than&nbsp;its&nbsp;home&nbsp;server,&nbsp;its&nbsp;home&nbsp;server&nbsp;MUST&nbsp;stamp&nbsp;a&nbsp;'from'&nbsp;address&nbsp;on&nbsp;the&nbsp;remove&nbsp;request,&nbsp;which&nbsp;<span style="color: #0000FF; ">in</span>&nbsp;accordance&nbsp;with&nbsp;XMPP&nbsp;Core&nbsp;will&nbsp;be&nbsp;the&nbsp;entity's&nbsp;full&nbsp;JID&nbsp;&lt;localpart@domain.tld/resource&gt;.&nbsp;The&nbsp;service&nbsp;MUST&nbsp;perform&nbsp;the&nbsp;remove&nbsp;based&nbsp;on&nbsp;the&nbsp;bare&nbsp;JID&nbsp;&lt;localpart@domain.tld&gt;&nbsp;portion&nbsp;of&nbsp;the&nbsp;'from'&nbsp;address. &nbsp;</div><p>&nbsp;</p><span style="font-size: 14pt;">意思是说注册请求不能包含&#8220;from&#8221;属性。</span><br style="font-size: 14px;" /><p style="margin: 0px; padding: 0px; font-size: 14px;"><span style="font-size: 14pt;">正常的注册流如下：</span></p><div style="background-color:#eeeeee;font-size:13px;border:1px solid #CCCCCC;padding-right: 5px;padding-bottom: 4px;padding-left: 4px;padding-top: 4px;width: 98%;word-break:break-all"><!--<br /><br />Code highlighting produced by Actipro CodeHighlighter (freeware)<br />http://www.CodeHighlighter.com/<br /><br />--><span style="color: #0000FF; ">&lt;</span><span style="color: #800000; ">iq&nbsp;</span><span style="color: #FF0000; ">id</span><span style="color: #0000FF; ">='uid:4e69eccd:00003d6c'&nbsp;</span><span style="color: #FF0000; ">type</span><span style="color: #0000FF; ">='set'&nbsp;</span><span style="color: #FF0000; ">xmlns</span><span style="color: #0000FF; ">='jabber:client'&gt;&lt;query&nbsp;</span><span style="color: #FF0000; ">xmlns</span><span style="color: #0000FF; ">='jabber:iq:register'&gt;&lt;username&gt;bbaxiao&lt;/username&gt;&lt;password&gt;123456&lt;/password&gt;&lt;name&gt;test2&lt;/name&gt;&lt;email&gt;163@gmail.com&lt;/email&gt;&lt;/query&gt;&lt;/iq&gt;&nbsp;</span></div><strong><br /></strong><p style="margin: 0px; padding: 0px; font-size: 14px;">---------------------------</p><p style="margin: 0px; padding: 0px; font-size: 14px;"><span style="font-size: 14pt;">综上所述，解决方案如下：</span></p><p style="margin: 0px; padding: 0px; font-size: 14px;"><span style="font-size: 14pt;">一、关闭openFire的匿名登录功能。^_^&#8230;&#8230;</span></p><p style="margin: 0px; padding: 0px; font-size: 14px;"><span style="font-size: 14pt;">二、禁止GLOOX匿名认证功能。</span></p><div style="background-color:#eeeeee;font-size:13px;border:1px solid #CCCCCC;padding-right: 5px;padding-bottom: 4px;padding-left: 4px;padding-top: 4px;width: 98%;word-break:break-all"><!--<br /><br />Code highlighting produced by Actipro CodeHighlighter (freeware)<br />http://www.CodeHighlighter.com/<br /><br />--><span style="font-size: 12pt;">file:client.cpp&nbsp;</span><br />&nbsp;<br /><span style="font-size: 12pt;">fun:&nbsp;int&nbsp;Client::getSaslMechs(&nbsp;Tag*&nbsp;tag&nbsp;)&nbsp;</span><br />&nbsp;<br /><span style="font-size: 12pt;">line:423&nbsp;</span><br />&nbsp;<br /><span style="font-size: 12pt; color: #008000;">//将423行注释掉即可。&nbsp;</span><br /><span style="font-size: 12pt;">422：if(&nbsp;tag-&gt;hasChildWithCData(&nbsp;mech,&nbsp;"ANONYMOUS"&nbsp;)&nbsp;)&nbsp;</span><br /><span style="font-size: 12pt;">423 &nbsp; &nbsp; &nbsp;</span><span style="font-size: 12pt; color: #008000;">//mechs&nbsp;|=&nbsp;SaslMechAnonymous;&nbsp;</span></div><strong><br /></strong><span style="font-size: 14pt;">重新编译生成DLL即可。</span><p style="margin: 0px; padding: 0px; font-size: 14px;"><span style="font-size: 14pt;">三、手动设置GLOOX客户端SASL认证机制</span></p><p style="margin: 0px; padding: 0px; font-size: 14px;"><span style="font-size: 14pt;">在调用j-&gt;connect()之前设置SASL认证机制，比如设置为&#8220;DIGEST-MD5&#8221;</span></p><strong><br /></strong><div style="background-color:#eeeeee;font-size:13px;border:1px solid #CCCCCC;padding-right: 5px;padding-bottom: 4px;padding-left: 4px;padding-top: 4px;width: 98%;word-break:break-all"><!--<br /><br />Code highlighting produced by Actipro CodeHighlighter (freeware)<br />http://www.CodeHighlighter.com/<br /><br />--><span style="font-size: 12pt;">j-&gt;setSASLMechanisms(SaslMechDigestMd5);</span></div><strong><br /></strong><span style="font-size: 14pt;">这种方式的缺点是需要先确定服务器支持的认证机制。</span><br style="font-size: 14px;" /><p style="margin: 0px; padding: 0px; font-size: 14px;"></p><p style="margin: 0px; padding: 0px; font-size: 14px;"></p><p style="margin: 0px; padding: 0px; font-size: 14px;"></p><p style="margin: 0px; padding: 0px; font-size: 14px;"><span style="font-size: 14pt;">四、根据XEP-0077所述，即使其名登录，注册流只要不带&#8220;from&#8221;属性应该也可以。所以我们要处理发出的注册流，去除&#8220;from&#8221;属性重新发送注册流即可。</span></p><strong><br /></strong><strong style="font-size: 14pt;">本文转自：</strong><a href="http://blog.csdn.net/abcpanpeng/article/details/7370974" style="font-size: 14pt;">http://blog.csdn.net/abcpanpeng/article/details/7370974</a><p><br /></p><img src ="http://www.cppblog.com/wanghaiguang/aggbug/208165.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/wanghaiguang/" target="_blank">王海光</a> 2014-08-28 17:59 <a href="http://www.cppblog.com/wanghaiguang/archive/2014/08/28/208165.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>iOS 解决NSString转换为NSURL时包含中文字符</title><link>http://www.cppblog.com/wanghaiguang/archive/2014/08/18/208048.html</link><dc:creator>王海光</dc:creator><author>王海光</author><pubDate>Mon, 18 Aug 2014 01:45:00 GMT</pubDate><guid>http://www.cppblog.com/wanghaiguang/archive/2014/08/18/208048.html</guid><wfw:comment>http://www.cppblog.com/wanghaiguang/comments/208048.html</wfw:comment><comments>http://www.cppblog.com/wanghaiguang/archive/2014/08/18/208048.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/wanghaiguang/comments/commentRss/208048.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/wanghaiguang/services/trackbacks/208048.html</trackback:ping><description><![CDATA[<span style="color: #362e2b; font-family: Verdana; line-height: 26px; background-color: #ffffff; font-size: 14pt;">NSString中如果包括中文字符，在转换为NSURL时得到的值为nil<br /><br /></span><div><span style="color: #362e2b; font-family: Verdana; line-height: 26px; background-color: #ffffff; font-size: 14pt;">解决办法：</span></div>
<div>
<div style="background-color: #eeeeee; font-size: 13px; border-left-color: #cccccc; padding: 4px 5px 4px 4px; width: 98%; word-break: break-all;"><!--<br />
<br />
Code highlighting produced by Actipro CodeHighlighter (freeware)<br />
http://www.CodeHighlighter.com/<br />
<br />
--><span style="font-family: Verdana; font-size: 14pt;">NSString&nbsp;*urlString&nbsp;=&nbsp;[NSString&nbsp;stringWithFormat:@"http://api.openweathermap.org/data/2.5/weather?q=%@&amp;units=imperial",cityName];</span><br />
<span style="color: red; font-family: Verdana; font-size: 14pt;">urlString&nbsp;</span><span style="color: red; font-family: Verdana; font-size: 14pt;">=</span><span style="color: red; font-family: Verdana; font-size: 14pt;">&nbsp;[urlString&nbsp;stringByAddingPercentEscapesUsingEncoding:NSUTF8StringEncoding];</span><br /><span style="font-family: Verdana; font-size: 14pt;">
NSURL&nbsp;*url&nbsp;=&nbsp;[NSURL&nbsp;URLWithString:urlString];</span><br /><span style="font-family: Verdana; font-size: 14pt;">
NSLog(@"%@",&nbsp;url);</span></div>
</div><img src ="http://www.cppblog.com/wanghaiguang/aggbug/208048.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/wanghaiguang/" target="_blank">王海光</a> 2014-08-18 09:45 <a href="http://www.cppblog.com/wanghaiguang/archive/2014/08/18/208048.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>iOS 监听 Home键（转载）</title><link>http://www.cppblog.com/wanghaiguang/archive/2014/08/01/207884.html</link><dc:creator>王海光</dc:creator><author>王海光</author><pubDate>Fri, 01 Aug 2014 05:31:00 GMT</pubDate><guid>http://www.cppblog.com/wanghaiguang/archive/2014/08/01/207884.html</guid><wfw:comment>http://www.cppblog.com/wanghaiguang/comments/207884.html</wfw:comment><comments>http://www.cppblog.com/wanghaiguang/archive/2014/08/01/207884.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/wanghaiguang/comments/commentRss/207884.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/wanghaiguang/services/trackbacks/207884.html</trackback:ping><description><![CDATA[<span style="background-color: #ececec; color: #626262; font-family: Arial, Helvetica, simsun, u5b8bu4f53; font-size: 14px; line-height: 25px;">第一步:</span><br />
<span style="color: #626262; font-family: Arial, Helvetica, simsun, u5b8bu4f53; line-height: 25px; background-color: #ececec;">创建2个NSNotificationCenter监听</span><br style="line-height: 25px; color: #626262; font-family: Arial, Helvetica, simsun, u5b8bu4f53; background-color: #ececec;" />
<pre class="prettyprint" name="code" style="white-space: pre-wrap; word-wrap: break-word; line-height: 25px; padding: 2px; border: 1px solid #888888; color: #626262; background-color: #ececec;"><span class="pun" style="color: #666600;">[[</span><span class="typ" style="color: #660066;">NSNotificationCenter</span><span class="pln" style="color: #000000;"> defaultCenter</span><span class="pun" style="color: #666600;">]</span><span class="pln" style="color: #000000;"> addObserver</span><span class="pun" style="color: #666600;">:</span><span class="kwd" style="color: #000088;">self</span><span class="pln" style="color: #000000;"> selector</span><span class="pun" style="color: #666600;">:</span><span class="lit" style="color: #006666;">@selector</span><span class="pun" style="color: #666600;">(</span><span class="pln" style="color: #000000;">applicationWillResignActive</span><span class="pun" style="color: #666600;">:)</span>
<span class="pln" style="color: #000000;">name</span><span class="pun" style="color: #666600;">:</span><span class="typ" style="color: #660066;">UIApplicationWillResignActiveNotification</span><span class="pln" style="color: #000000;"> </span><span class="kwd" style="color: #000088;">object</span><span class="pun" style="color: #666600;">:</span><span class="kwd" style="color: #000088;">nil</span><span class="pun" style="color: #666600;">];</span><span class="pln" style="color: #000000;"> </span><span class="com" style="color: #880000;">//监听是否触发home键挂起程序.</span>
<span class="pln" style="color: #000000;">    </span>
<span class="pun" style="color: #666600;">[[</span><span class="typ" style="color: #660066;">NSNotificationCenter</span><span class="pln" style="color: #000000;"> defaultCenter</span><span class="pun" style="color: #666600;">]</span><span class="pln" style="color: #000000;"> addObserver</span><span class="pun" style="color: #666600;">:</span><span class="kwd" style="color: #000088;">self</span><span class="pln" style="color: #000000;"> selector</span><span class="pun" style="color: #666600;">:</span><span class="lit" style="color: #006666;">@selector</span><span class="pun" style="color: #666600;">(</span><span class="pln" style="color: #000000;">applicationDidBecomeActive</span><span class="pun" style="color: #666600;">:)</span>
<span class="pln" style="color: #000000;">name</span><span class="pun" style="color: #666600;">:</span><span class="typ" style="color: #660066;">UIApplicationDidBecomeActiveNotification</span><span class="pln" style="color: #000000;"> </span><span class="kwd" style="color: #000088;">object</span><span class="pun" style="color: #666600;">:</span><span class="kwd" style="color: #000088;">nil</span><span class="pun" style="color: #666600;">];</span><span class="pln" style="color: #000000;"> </span><span class="com" style="color: #880000;">//监听是否重新进入程序程序.</span>
<p style="margin: 0px 0px 10px; padding: 0px;">
</p>
</pre>
<br style="line-height: 25px; color: #626262; font-family: Arial, Helvetica, simsun, u5b8bu4f53; background-color: #ececec;" />
<span style="color: #626262; font-family: Arial, Helvetica, simsun, u5b8bu4f53; line-height: 25px; background-color: #ececec;">第二步:</span><br style="line-height: 25px; color: #626262; font-family: Arial, Helvetica, simsun, u5b8bu4f53; background-color: #ececec;" />
<span style="color: #626262; font-family: Arial, Helvetica, simsun, u5b8bu4f53; line-height: 25px; background-color: #ececec;">实现2个NSNotificationCenter所触发的事件方法</span><br style="line-height: 25px; color: #626262; font-family: Arial, Helvetica, simsun, u5b8bu4f53; background-color: #ececec;" />
<pre class="prettyprint" name="code" style="white-space: pre-wrap; word-wrap: break-word; line-height: 25px; padding: 2px; border: 1px solid #888888; color: #626262; background-color: #ececec;"><span class="pun" style="color: #666600;">-</span><span class="pln" style="color: #000000;"> </span><span class="pun" style="color: #666600;">(</span><span class="kwd" style="color: #000088;">void</span><span class="pun" style="color: #666600;">)</span><span class="pln" style="color: #000000;">applicationWillResignActive</span><span class="pun" style="color: #666600;">:(</span><span class="typ" style="color: #660066;">NSNotification</span><span class="pln" style="color: #000000;"> </span><span class="pun" style="color: #666600;">*)</span><span class="pln" style="color: #000000;">notification</span>
<span class="pun" style="color: #666600;">{</span>
<span class="pln" style="color: #000000;">    printf</span><span class="pun" style="color: #666600;">(</span><span class="str" style="color: #008800;">"按理说是触发home按下\n"</span><span class="pun" style="color: #666600;">);</span>
<span class="pun" style="color: #666600;">}</span>
<span class="pun" style="color: #666600;">-</span><span class="pln" style="color: #000000;"> </span><span class="pun" style="color: #666600;">(</span><span class="kwd" style="color: #000088;">void</span><span class="pun" style="color: #666600;">)</span><span class="pln" style="color: #000000;">applicationDidBecomeActive</span><span class="pun" style="color: #666600;">:(</span><span class="typ" style="color: #660066;">NSNotification</span><span class="pln" style="color: #000000;"> </span><span class="pun" style="color: #666600;">*)</span><span class="pln" style="color: #000000;">notification</span>
<span class="pun" style="color: #666600;">{</span>
<span class="pln" style="color: #000000;">    printf</span><span class="pun" style="color: #666600;">(</span><span class="str" style="color: #008800;">"按理说是重新进来后响应\n"</span><span class="pun" style="color: #666600;">);</span>
<span class="pun" style="color: #666600;">}</span>
<p style="margin: 0px 0px 10px; padding: 0px;">
</p>
</pre>
<br style="line-height: 25px; color: #626262; font-family: Arial, Helvetica, simsun, u5b8bu4f53; background-color: #ececec;" />
<span style="color: #626262; font-family: Arial, Helvetica, simsun, u5b8bu4f53; line-height: 25px; background-color: #ececec;">注: 在home键触发后,AppDelegate响应的方法为:</span><br style="line-height: 25px; color: #626262; font-family: Arial, Helvetica, simsun, u5b8bu4f53; background-color: #ececec;" />
<pre class="prettyprint" name="code" style="white-space: pre-wrap; word-wrap: break-word; line-height: 25px; padding: 2px; border: 1px solid #888888; color: #626262; background-color: #ececec;"><p style="margin: 0px 0px 10px; padding: 0px;"><span class="pun" style="color: #666600;">-</span><span class="pln" style="color: #000000;"> </span><span class="pun" style="color: #666600;">(</span><span class="kwd" style="color: #000088;">void</span><span class="pun" style="color: #666600;">)</span><span class="pln" style="color: #000000;">applicationDidEnterBackground</span><span class="pun" style="color: #666600;">:(</span><span class="typ" style="color: #660066;">UIApplication</span><span class="pln" style="color: #000000;"> </span><span class="pun" style="color: #666600;">*)</span><span class="pln" style="color: #000000;">application</span>
<span class="pun" style="color: #666600;">{</span>
<span class="pln" style="color: #000000;">    </span><span class="com" style="color: #880000;">/*</span>
<span class="com" style="color: #880000;">     Use this method to release shared resources, save user data, invalidate timers, </span>
</p>
<p style="margin: 0px 0px 10px; padding: 0px;"><span class="com" style="color: #880000;">     and store enough application state information to restore your application to its current state in case it is terminated later.</span>
<span class="com" style="color: #880000;">     If your application supports background execution, this method is called instead of applicationWillTerminate: when the user quits.</span>
<span class="com" style="color: #880000;">     */</span>
<span class="pun" style="color: #666600;">}</span></p>
</pre>
<span style="color: #626262; font-family: Arial, Helvetica, simsun, u5b8bu4f53; line-height: 25px; background-color: #ececec;">本文转自：</span>http://blog.csdn.net/sqc3375177/article/details/9466687
<div><br />
</div>
<div>其他相关信息：</div>
<div>
<div style="line-height: 25px; color: #323e32; background-color: #ffffff; font-family: Monaco, 'DejaVu sans Mono', 'Bitstream Vera sans Mono', Consolas, 'Courier new', monospace; font-size: 12px; width: 679px; overflow: auto; margin-left: 9px; padding: 1px; word-break: break-all; word-wrap: break-word;">
<ol start="1" style="line-height: 1.4em; margin: 0px 0px 1px; padding: 2px 0px; border: 1px solid #d1d7dc; list-style: none; font-size: 1em; color: #2b91af;">
    <li style="line-height: 18px; margin: 0px 0px 0px 38px; padding: 0px 0px 0px 10px; border-width: 0px 0px 0px 1px; list-style: decimal; font-size: 1em; border-left-style: solid; border-left-color: #d1d7dc; background-color: #fafafa;"><span style="word-wrap: normal; word-break: normal; color: black;">-&nbsp;<wbr style="line-height: 21px;">(BOOL)application:(UIApplication&nbsp;<wbr style="line-height: 21px;">*)application&nbsp;<wbr style="line-height: 21px;">didFinishLaunchingWithOp<wbr style="line-height: 21px;">tions:(NSDictionary&nbsp;<wbr style="line-height: 21px;">*)launchOptions&nbsp;<wbr style="line-height: 21px;">&nbsp;<wbr style="line-height: 21px;"></span></li>
    <li style="line-height: 18px; margin: 0px 0px 0px 38px; padding: 0px 0px 0px 10px; border-width: 0px 0px 0px 1px; list-style: decimal; font-size: 1em; border-left-style: solid; border-left-color: #d1d7dc; background-color: #fafafa;"><span style="word-wrap: normal; word-break: normal; color: black;">{&nbsp;<wbr style="line-height: 21px;">&nbsp;<wbr style="line-height: 21px;"></span></li>
    <li style="line-height: 18px; margin: 0px 0px 0px 38px; padding: 0px 0px 0px 10px; border-width: 0px 0px 0px 1px; list-style: decimal; font-size: 1em; border-left-style: solid; border-left-color: #d1d7dc; background-color: #fafafa;"><span style="word-wrap: normal; word-break: normal; color: black;">&nbsp;<wbr style="line-height: 21px;">&nbsp;<wbr style="line-height: 21px;">&nbsp;<wbr style="line-height: 21px;">&nbsp;<wbr style="line-height: 21px;"><span style="word-wrap: normal; word-break: normal; color: #008200;">//&nbsp;<wbr style="line-height: 21px;">Override&nbsp;<wbr style="line-height: 21px;">point&nbsp;<wbr style="line-height: 21px;">for&nbsp;<wbr style="line-height: 21px;">customization&nbsp;<wbr style="line-height: 21px;">after&nbsp;<wbr style="line-height: 21px;">application&nbsp;<wbr style="line-height: 21px;">launch.</span>&nbsp;<wbr style="line-height: 21px;">&nbsp;<wbr style="line-height: 21px;"></span></li>
    <li style="line-height: 18px; margin: 0px 0px 0px 38px; padding: 0px 0px 0px 10px; border-width: 0px 0px 0px 1px; list-style: decimal; font-size: 1em; border-left-style: solid; border-left-color: #d1d7dc; background-color: #fafafa;"><span style="word-wrap: normal; word-break: normal; color: black;">&nbsp;<wbr style="line-height: 21px;">&nbsp;<wbr style="line-height: 21px;">&nbsp;<wbr style="line-height: 21px;">&nbsp;<wbr style="line-height: 21px;">NSLog(@<span style="word-wrap: normal; word-break: normal; color: blue;">"\n&nbsp;<wbr style="line-height: 21px;">===&gt;&nbsp;<wbr style="line-height: 21px;">程序开始&nbsp;<wbr style="line-height: 21px;">!"</span>);&nbsp;<wbr style="line-height: 21px;">&nbsp;<wbr style="line-height: 21px;">&nbsp;<wbr style="line-height: 21px;"></span></li>
    <li style="line-height: 18px; margin: 0px 0px 0px 38px; padding: 0px 0px 0px 10px; border-width: 0px 0px 0px 1px; list-style: decimal; font-size: 1em; border-left-style: solid; border-left-color: #d1d7dc; background-color: #fafafa;"><span style="word-wrap: normal; word-break: normal; color: black;">&nbsp;<wbr style="line-height: 21px;">&nbsp;<wbr style="line-height: 21px;">&nbsp;<wbr style="line-height: 21px;">&nbsp;<wbr style="line-height: 21px;">&nbsp;<wbr style="line-height: 21px;">&nbsp;<wbr style="line-height: 21px;"></span></li>
    <li style="line-height: 18px; margin: 0px 0px 0px 38px; padding: 0px 0px 0px 10px; border-width: 0px 0px 0px 1px; list-style: decimal; font-size: 1em; border-left-style: solid; border-left-color: #d1d7dc; background-color: #fafafa;"><span style="word-wrap: normal; word-break: normal; color: black;">&nbsp;<wbr style="line-height: 21px;">&nbsp;<wbr style="line-height: 21px;">&nbsp;<wbr style="line-height: 21px;">&nbsp;<wbr style="line-height: 21px;"><span style="word-wrap: normal; word-break: normal; color: #7f0055; font-weight: bold;">return</span>&nbsp;<wbr style="line-height: 21px;">YES;&nbsp;<wbr style="line-height: 21px;">&nbsp;<wbr style="line-height: 21px;"></span></li>
    <li style="line-height: 18px; margin: 0px 0px 0px 38px; padding: 0px 0px 0px 10px; border-width: 0px 0px 0px 1px; list-style: decimal; font-size: 1em; border-left-style: solid; border-left-color: #d1d7dc; background-color: #fafafa;"><span style="word-wrap: normal; word-break: normal; color: black;">}&nbsp;<wbr style="line-height: 21px;">&nbsp;<wbr style="line-height: 21px;"></span></li>
    <li style="line-height: 18px; margin: 0px 0px 0px 38px; padding: 0px 0px 0px 10px; border-width: 0px 0px 0px 1px; list-style: decimal; font-size: 1em; border-left-style: solid; border-left-color: #d1d7dc; background-color: #fafafa;"><span style="word-wrap: normal; word-break: normal; color: black;">&nbsp;<wbr style="line-height: 21px;">&nbsp;<wbr style="line-height: 21px;">&nbsp;<wbr style="line-height: 21px;">&nbsp;<wbr style="line-height: 21px;">&nbsp;<wbr style="line-height: 21px;">&nbsp;<wbr style="line-height: 21px;">&nbsp;<wbr style="line-height: 21px;">&nbsp;<wbr style="line-height: 21px;">&nbsp;<wbr style="line-height: 21px;">&nbsp;<wbr style="line-height: 21px;">&nbsp;<wbr style="line-height: 21px;">&nbsp;<wbr style="line-height: 21px;">&nbsp;<wbr style="line-height: 21px;">&nbsp;<wbr style="line-height: 21px;">&nbsp;<wbr style="line-height: 21px;">&nbsp;<wbr style="line-height: 21px;">&nbsp;<wbr style="line-height: 21px;">&nbsp;<wbr style="line-height: 21px;">&nbsp;<wbr style="line-height: 21px;">&nbsp;<wbr style="line-height: 21px;">&nbsp;<wbr style="line-height: 21px;">&nbsp;<wbr style="line-height: 21px;">&nbsp;<wbr style="line-height: 21px;">&nbsp;<wbr style="line-height: 21px;">&nbsp;<wbr style="line-height: 21px;">&nbsp;<wbr style="line-height: 21px;">&nbsp;<wbr style="line-height: 21px;">&nbsp;<wbr style="line-height: 21px;">&nbsp;<wbr style="line-height: 21px;">&nbsp;<wbr style="line-height: 21px;"></span></li>
    <li style="line-height: 18px; margin: 0px 0px 0px 38px; padding: 0px 0px 0px 10px; border-width: 0px 0px 0px 1px; list-style: decimal; font-size: 1em; border-left-style: solid; border-left-color: #d1d7dc; background-color: #fafafa;"><span style="word-wrap: normal; word-break: normal; color: black;">-&nbsp;<wbr style="line-height: 21px;">(<span style="word-wrap: normal; word-break: normal; color: #7f0055; font-weight: bold;">void</span>)applicationWillResignAct<wbr style="line-height: 21px;">ive:(UIApplication&nbsp;<wbr style="line-height: 21px;">*)application&nbsp;<wbr style="line-height: 21px;">&nbsp;<wbr style="line-height: 21px;"></span></li>
    <li style="line-height: 18px; margin: 0px 0px 0px 38px; padding: 0px 0px 0px 10px; border-width: 0px 0px 0px 1px; list-style: decimal; font-size: 1em; border-left-style: solid; border-left-color: #d1d7dc; background-color: #fafafa;"><span style="word-wrap: normal; word-break: normal; color: black;">{&nbsp;<wbr style="line-height: 21px;">&nbsp;<wbr style="line-height: 21px;"></span></li>
    <li style="line-height: 18px; margin: 0px 0px 0px 38px; padding: 0px 0px 0px 10px; border-width: 0px 0px 0px 1px; list-style: decimal; font-size: 1em; border-left-style: solid; border-left-color: #d1d7dc; background-color: #fafafa;"><span style="word-wrap: normal; word-break: normal; color: black;">&nbsp;<wbr style="line-height: 21px;">&nbsp;<wbr style="line-height: 21px;">&nbsp;<wbr style="line-height: 21px;">&nbsp;<wbr style="line-height: 21px;">&nbsp;<wbr style="line-height: 21px;">&nbsp;<wbr style="line-height: 21px;"></span></li>
    <li style="line-height: 18px; margin: 0px 0px 0px 38px; padding: 0px 0px 0px 10px; border-width: 0px 0px 0px 1px; list-style: decimal; font-size: 1em; border-left-style: solid; border-left-color: #d1d7dc; background-color: #fafafa;"><span style="word-wrap: normal; word-break: normal; color: black;">&nbsp;<wbr style="line-height: 21px;">&nbsp;<wbr style="line-height: 21px;">&nbsp;<wbr style="line-height: 21px;">&nbsp;<wbr style="line-height: 21px;">NSLog(@<span style="word-wrap: normal; word-break: normal; color: blue;">"\n&nbsp;<wbr style="line-height: 21px;">===&gt;&nbsp;<wbr style="line-height: 21px;">程序暂行&nbsp;<wbr style="line-height: 21px;">!"</span>);&nbsp;<wbr style="line-height: 21px;">&nbsp;<wbr style="line-height: 21px;">&nbsp;<wbr style="line-height: 21px;"></span></li>
    <li style="line-height: 18px; margin: 0px 0px 0px 38px; padding: 0px 0px 0px 10px; border-width: 0px 0px 0px 1px; list-style: decimal; font-size: 1em; border-left-style: solid; border-left-color: #d1d7dc; background-color: #fafafa;"><span style="word-wrap: normal; word-break: normal; color: black;">}&nbsp;<wbr style="line-height: 21px;">&nbsp;<wbr style="line-height: 21px;"></span></li>
    <li style="line-height: 18px; margin: 0px 0px 0px 38px; padding: 0px 0px 0px 10px; border-width: 0px 0px 0px 1px; list-style: decimal; font-size: 1em; border-left-style: solid; border-left-color: #d1d7dc; background-color: #fafafa;"><span style="word-wrap: normal; word-break: normal; color: black;">&nbsp;<wbr style="line-height: 21px;">&nbsp;<wbr style="line-height: 21px;"></span></li>
    <li style="line-height: 18px; margin: 0px 0px 0px 38px; padding: 0px 0px 0px 10px; border-width: 0px 0px 0px 1px; list-style: decimal; font-size: 1em; border-left-style: solid; border-left-color: #d1d7dc; background-color: #fafafa;"><span style="word-wrap: normal; word-break: normal; color: black;">-&nbsp;<wbr style="line-height: 21px;">(<span style="word-wrap: normal; word-break: normal; color: #7f0055; font-weight: bold;">void</span>)applicationDidEnterBackg<wbr style="line-height: 21px;">round:(UIApplication&nbsp;<wbr style="line-height: 21px;">*)application&nbsp;<wbr style="line-height: 21px;">&nbsp;<wbr style="line-height: 21px;"></span></li>
    <li style="line-height: 18px; margin: 0px 0px 0px 38px; padding: 0px 0px 0px 10px; border-width: 0px 0px 0px 1px; list-style: decimal; font-size: 1em; border-left-style: solid; border-left-color: #d1d7dc; background-color: #fafafa;"><span style="word-wrap: normal; word-break: normal; color: black;">{&nbsp;<wbr style="line-height: 21px;">&nbsp;<wbr style="line-height: 21px;"></span></li>
    <li style="line-height: 18px; margin: 0px 0px 0px 38px; padding: 0px 0px 0px 10px; border-width: 0px 0px 0px 1px; list-style: decimal; font-size: 1em; border-left-style: solid; border-left-color: #d1d7dc; background-color: #fafafa;"><span style="word-wrap: normal; word-break: normal; color: black;">&nbsp;<wbr style="line-height: 21px;">&nbsp;<wbr style="line-height: 21px;">&nbsp;<wbr style="line-height: 21px;">&nbsp;<wbr style="line-height: 21px;">&nbsp;<wbr style="line-height: 21px;">&nbsp;<wbr style="line-height: 21px;"></span></li>
    <li style="line-height: 18px; margin: 0px 0px 0px 38px; padding: 0px 0px 0px 10px; border-width: 0px 0px 0px 1px; list-style: decimal; font-size: 1em; border-left-style: solid; border-left-color: #d1d7dc; background-color: #fafafa;"><span style="word-wrap: normal; word-break: normal; color: black;">&nbsp;<wbr style="line-height: 21px;">&nbsp;<wbr style="line-height: 21px;">&nbsp;<wbr style="line-height: 21px;">&nbsp;<wbr style="line-height: 21px;">&nbsp;<wbr style="line-height: 21px;">NSLog(@<span style="word-wrap: normal; word-break: normal; color: blue;">"\n&nbsp;<wbr style="line-height: 21px;">===&gt;&nbsp;<wbr style="line-height: 21px;">程序进入后台&nbsp;<wbr style="line-height: 21px;">!"</span>);&nbsp;<wbr style="line-height: 21px;">&nbsp;<wbr style="line-height: 21px;">&nbsp;<wbr style="line-height: 21px;"></span></li>
    <li style="line-height: 18px; margin: 0px 0px 0px 38px; padding: 0px 0px 0px 10px; border-width: 0px 0px 0px 1px; list-style: decimal; font-size: 1em; border-left-style: solid; border-left-color: #d1d7dc; background-color: #fafafa;"><span style="word-wrap: normal; word-break: normal; color: black;">}&nbsp;<wbr style="line-height: 21px;">&nbsp;<wbr style="line-height: 21px;"></span></li>
    <li style="line-height: 18px; margin: 0px 0px 0px 38px; padding: 0px 0px 0px 10px; border-width: 0px 0px 0px 1px; list-style: decimal; font-size: 1em; border-left-style: solid; border-left-color: #d1d7dc; background-color: #fafafa;"><span style="word-wrap: normal; word-break: normal; color: black;">&nbsp;<wbr style="line-height: 21px;">&nbsp;<wbr style="line-height: 21px;"></span></li>
    <li style="line-height: 18px; margin: 0px 0px 0px 38px; padding: 0px 0px 0px 10px; border-width: 0px 0px 0px 1px; list-style: decimal; font-size: 1em; border-left-style: solid; border-left-color: #d1d7dc; background-color: #fafafa;"><span style="word-wrap: normal; word-break: normal; color: black;">-&nbsp;<wbr style="line-height: 21px;">(<span style="word-wrap: normal; word-break: normal; color: #7f0055; font-weight: bold;">void</span>)applicationWillEnterFore<wbr style="line-height: 21px;">ground:(UIApplication&nbsp;<wbr style="line-height: 21px;">*)application&nbsp;<wbr style="line-height: 21px;">&nbsp;<wbr style="line-height: 21px;"></span></li>
    <li style="line-height: 18px; margin: 0px 0px 0px 38px; padding: 0px 0px 0px 10px; border-width: 0px 0px 0px 1px; list-style: decimal; font-size: 1em; border-left-style: solid; border-left-color: #d1d7dc; background-color: #fafafa;"><span style="word-wrap: normal; word-break: normal; color: black;">{&nbsp;<wbr style="line-height: 21px;">&nbsp;<wbr style="line-height: 21px;"></span></li>
    <li style="line-height: 18px; margin: 0px 0px 0px 38px; padding: 0px 0px 0px 10px; border-width: 0px 0px 0px 1px; list-style: decimal; font-size: 1em; border-left-style: solid; border-left-color: #d1d7dc; background-color: #fafafa;"><span style="word-wrap: normal; word-break: normal; color: black;">&nbsp;<wbr style="line-height: 21px;">&nbsp;<wbr style="line-height: 21px;">&nbsp;<wbr style="line-height: 21px;">&nbsp;<wbr style="line-height: 21px;">&nbsp;<wbr style="line-height: 21px;">&nbsp;<wbr style="line-height: 21px;"></span></li>
    <li style="line-height: 18px; margin: 0px 0px 0px 38px; padding: 0px 0px 0px 10px; border-width: 0px 0px 0px 1px; list-style: decimal; font-size: 1em; border-left-style: solid; border-left-color: #d1d7dc; background-color: #fafafa;"><span style="word-wrap: normal; word-break: normal; color: black;">&nbsp;<wbr style="line-height: 21px;">&nbsp;<wbr style="line-height: 21px;">&nbsp;<wbr style="line-height: 21px;">&nbsp;<wbr style="line-height: 21px;">&nbsp;<wbr style="line-height: 21px;">NSLog(@<span style="word-wrap: normal; word-break: normal; color: blue;">"\n&nbsp;<wbr style="line-height: 21px;">===&gt;&nbsp;<wbr style="line-height: 21px;">程序进入前台&nbsp;<wbr style="line-height: 21px;">!"</span>);&nbsp;<wbr style="line-height: 21px;">&nbsp;<wbr style="line-height: 21px;">&nbsp;<wbr style="line-height: 21px;"></span></li>
    <li style="line-height: 18px; margin: 0px 0px 0px 38px; padding: 0px 0px 0px 10px; border-width: 0px 0px 0px 1px; list-style: decimal; font-size: 1em; border-left-style: solid; border-left-color: #d1d7dc; background-color: #fafafa;"><span style="word-wrap: normal; word-break: normal; color: black;">}&nbsp;<wbr style="line-height: 21px;">&nbsp;<wbr style="line-height: 21px;"></span></li>
    <li style="line-height: 18px; margin: 0px 0px 0px 38px; padding: 0px 0px 0px 10px; border-width: 0px 0px 0px 1px; list-style: decimal; font-size: 1em; border-left-style: solid; border-left-color: #d1d7dc; background-color: #fafafa;"><span style="word-wrap: normal; word-break: normal; color: black;">&nbsp;<wbr style="line-height: 21px;">&nbsp;<wbr style="line-height: 21px;"></span></li>
    <li style="line-height: 18px; margin: 0px 0px 0px 38px; padding: 0px 0px 0px 10px; border-width: 0px 0px 0px 1px; list-style: decimal; font-size: 1em; border-left-style: solid; border-left-color: #d1d7dc; background-color: #fafafa;"><span style="word-wrap: normal; word-break: normal; color: black;">-&nbsp;<wbr style="line-height: 21px;">(<span style="word-wrap: normal; word-break: normal; color: #7f0055; font-weight: bold;">void</span>)applicationDidBecomeActi<wbr style="line-height: 21px;">ve:(UIApplication&nbsp;<wbr style="line-height: 21px;">*)application&nbsp;<wbr style="line-height: 21px;">&nbsp;<wbr style="line-height: 21px;"></span></li>
    <li style="line-height: 18px; margin: 0px 0px 0px 38px; padding: 0px 0px 0px 10px; border-width: 0px 0px 0px 1px; list-style: decimal; font-size: 1em; border-left-style: solid; border-left-color: #d1d7dc; background-color: #fafafa;"><span style="word-wrap: normal; word-break: normal; color: black;">{&nbsp;<wbr style="line-height: 21px;">&nbsp;<wbr style="line-height: 21px;"></span></li>
    <li style="line-height: 18px; margin: 0px 0px 0px 38px; padding: 0px 0px 0px 10px; border-width: 0px 0px 0px 1px; list-style: decimal; font-size: 1em; border-left-style: solid; border-left-color: #d1d7dc; background-color: #fafafa;"><span style="word-wrap: normal; word-break: normal; color: black;">&nbsp;<wbr style="line-height: 21px;">&nbsp;<wbr style="line-height: 21px;">&nbsp;<wbr style="line-height: 21px;">&nbsp;<wbr style="line-height: 21px;">NSLog(@<span style="word-wrap: normal; word-break: normal; color: blue;">"\n&nbsp;<wbr style="line-height: 21px;">===&gt;&nbsp;<wbr style="line-height: 21px;">程序重新激活&nbsp;<wbr style="line-height: 21px;">!"</span>);&nbsp;<wbr style="line-height: 21px;">&nbsp;<wbr style="line-height: 21px;">&nbsp;<wbr style="line-height: 21px;"></span></li>
    <li style="line-height: 18px; margin: 0px 0px 0px 38px; padding: 0px 0px 0px 10px; border-width: 0px 0px 0px 1px; list-style: decimal; font-size: 1em; border-left-style: solid; border-left-color: #d1d7dc; background-color: #fafafa;"><span style="word-wrap: normal; word-break: normal; color: black;">&nbsp;<wbr style="line-height: 21px;">&nbsp;<wbr style="line-height: 21px;">&nbsp;<wbr style="line-height: 21px;">&nbsp;<wbr style="line-height: 21px;">&nbsp;<wbr style="line-height: 21px;">&nbsp;<wbr style="line-height: 21px;"></span></li>
    <li style="line-height: 18px; margin: 0px 0px 0px 38px; padding: 0px 0px 0px 10px; border-width: 0px 0px 0px 1px; list-style: decimal; font-size: 1em; border-left-style: solid; border-left-color: #d1d7dc; background-color: #fafafa;"><span style="word-wrap: normal; word-break: normal; color: black;">}&nbsp;<wbr style="line-height: 21px;">&nbsp;<wbr style="line-height: 21px;"></span></li>
    <li style="line-height: 18px; margin: 0px 0px 0px 38px; padding: 0px 0px 0px 10px; border-width: 0px 0px 0px 1px; list-style: decimal; font-size: 1em; border-left-style: solid; border-left-color: #d1d7dc; background-color: #fafafa;"><span style="word-wrap: normal; word-break: normal; color: black;">&nbsp;<wbr style="line-height: 21px;">&nbsp;<wbr style="line-height: 21px;"></span></li>
    <li style="line-height: 18px; margin: 0px 0px 0px 38px; padding: 0px 0px 0px 10px; border-width: 0px 0px 0px 1px; list-style: decimal; font-size: 1em; border-left-style: solid; border-left-color: #d1d7dc; background-color: #fafafa;"><span style="word-wrap: normal; word-break: normal; color: black;">-&nbsp;<wbr style="line-height: 21px;">(<span style="word-wrap: normal; word-break: normal; color: #7f0055; font-weight: bold;">void</span>)applicationWillTerminate<wbr style="line-height: 21px;">:(UIApplication&nbsp;<wbr style="line-height: 21px;">*)application&nbsp;<wbr style="line-height: 21px;">&nbsp;<wbr style="line-height: 21px;"></span></li>
    <li style="line-height: 18px; margin: 0px 0px 0px 38px; padding: 0px 0px 0px 10px; border-width: 0px 0px 0px 1px; list-style: decimal; font-size: 1em; border-left-style: solid; border-left-color: #d1d7dc; background-color: #fafafa;"><span style="word-wrap: normal; word-break: normal; color: black;">{&nbsp;<wbr style="line-height: 21px;">&nbsp;<wbr style="line-height: 21px;"></span></li>
    <li style="line-height: 18px; margin: 0px 0px 0px 38px; padding: 0px 0px 0px 10px; border-width: 0px 0px 0px 1px; list-style: decimal; font-size: 1em; border-left-style: solid; border-left-color: #d1d7dc; background-color: #fafafa;"><span style="word-wrap: normal; word-break: normal; color: black;">&nbsp;<wbr style="line-height: 21px;">&nbsp;<wbr style="line-height: 21px;">&nbsp;<wbr style="line-height: 21px;">&nbsp;<wbr style="line-height: 21px;">NSLog(@<span style="word-wrap: normal; word-break: normal; color: blue;">"\n&nbsp;<wbr style="line-height: 21px;">===&gt;&nbsp;<wbr style="line-height: 21px;">程序意外暂行&nbsp;<wbr style="line-height: 21px;">!"</span>);&nbsp;<wbr style="line-height: 21px;">&nbsp;<wbr style="line-height: 21px;">&nbsp;<wbr style="line-height: 21px;"></span></li>
    <li style="line-height: 18px; margin: 0px 0px 0px 38px; padding: 0px 0px 0px 10px; border-width: 0px 0px 0px 1px; list-style: decimal; font-size: 1em; border-left-style: solid; border-left-color: #d1d7dc; background-color: #fafafa;"><span style="word-wrap: normal; word-break: normal; color: black;">&nbsp;<wbr style="line-height: 21px;">&nbsp;<wbr style="line-height: 21px;"></span></li>
    <li style="line-height: 18px; margin: 0px 0px 0px 38px; padding: 0px 0px 0px 10px; border-width: 0px 0px 0px 1px; list-style: decimal; font-size: 1em; border-left-style: solid; border-left-color: #d1d7dc; background-color: #fafafa;"><span style="word-wrap: normal; word-break: normal; color: black;">&nbsp;<wbr style="line-height: 21px;">&nbsp;<wbr style="line-height: 21px;">&nbsp;<wbr style="line-height: 21px;">&nbsp;<wbr style="line-height: 21px;">UIDevice&nbsp;<wbr style="line-height: 21px;">*device&nbsp;<wbr style="line-height: 21px;">=&nbsp;<wbr style="line-height: 21px;">[UIDevice&nbsp;<wbr style="line-height: 21px;">currentDevice];&nbsp;<wbr style="line-height: 21px;">&nbsp;<wbr style="line-height: 21px;"></span></li>
    <li style="line-height: 18px; margin: 0px 0px 0px 38px; padding: 0px 0px 0px 10px; border-width: 0px 0px 0px 1px; list-style: decimal; font-size: 1em; border-left-style: solid; border-left-color: #d1d7dc; background-color: #fafafa;"><span style="word-wrap: normal; word-break: normal; color: black;">&nbsp;<wbr style="line-height: 21px;">&nbsp;<wbr style="line-height: 21px;">&nbsp;<wbr style="line-height: 21px;">&nbsp;<wbr style="line-height: 21px;">&nbsp;<wbr style="line-height: 21px;">&nbsp;<wbr style="line-height: 21px;"></span></li>
    <li style="line-height: 18px; margin: 0px 0px 0px 38px; padding: 0px 0px 0px 10px; border-width: 0px 0px 0px 1px; list-style: decimal; font-size: 1em; border-left-style: solid; border-left-color: #d1d7dc; background-color: #fafafa;"><span style="word-wrap: normal; word-break: normal; color: black;">}&nbsp;<wbr style="line-height: 21px;">&nbsp;<wbr style="line-height: 21px;"></span></li>
</ol>
</div>
<span style="line-height: 25px; color: #323e32; font-size: 16px; background-color: #ffffff; word-wrap: normal; word-break: normal; font-family: Helvetica, Tahoma, Arial, sans-serif;">&nbsp;<wbr style="line-height: 28px;"></span>
<p style="margin: 0px; padding: 0px; color: #323e32; font-family: simsun; font-size: 16px; background-color: #ffffff; border: 0px; list-style: none; word-wrap: normal; word-break: normal;"><span style="word-wrap: normal; word-break: normal; color: #ff0000;">首次运行</span>：</p>
<p style="margin: 0px; padding: 0px; color: #323e32; font-family: simsun; font-size: 16px; background-color: #ffffff; border: 0px; list-style: none; word-wrap: normal; word-break: normal;">- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOp<wbr style="line-height: 28px;">tions:(NSDictionary *)launchOptions</p>
<p style="margin: 0px; padding: 0px; color: #323e32; font-family: simsun; font-size: 16px; background-color: #ffffff; border: 0px; list-style: none; word-wrap: normal; word-break: normal;">- (void)applicationDidBecomeActi<wbr style="line-height: 28px;">ve:(UIApplication *)application</p>
<p style="margin: 0px; padding: 0px; color: #323e32; font-family: simsun; font-size: 16px; background-color: #ffffff; border: 0px; list-style: none; word-wrap: normal; word-break: normal;">&nbsp;<wbr style="line-height: 28px;"></p>
<p style="margin: 0px; padding: 0px; color: #323e32; font-family: simsun; font-size: 16px; background-color: #ffffff; border: 0px; list-style: none; word-wrap: normal; word-break: normal;"><span style="word-wrap: normal; word-break: normal; color: #ff0000;">首次关闭（home）：</span></p>
<p style="margin: 0px; padding: 0px; color: #323e32; font-family: simsun; font-size: 16px; background-color: #ffffff; border: 0px; list-style: none; word-wrap: normal; word-break: normal;">- (void)applicationWillResignAct<wbr style="line-height: 28px;">ive:(UIApplication *)application</p>
<p style="margin: 0px; padding: 0px; color: #323e32; font-family: simsun; font-size: 16px; background-color: #ffffff; border: 0px; list-style: none; word-wrap: normal; word-break: normal;">- (void)applicationDidEnterBackg<wbr style="line-height: 28px;">round:(UIApplication *)application</p>
<p style="margin: 0px; padding: 0px; color: #323e32; font-family: simsun; font-size: 16px; background-color: #ffffff; border: 0px; list-style: none; word-wrap: normal; word-break: normal;">&nbsp;<wbr style="line-height: 28px;"></p>
<p style="margin: 0px; padding: 0px; color: #323e32; font-family: simsun; font-size: 16px; background-color: #ffffff; border: 0px; list-style: none; word-wrap: normal; word-break: normal;"><span style="word-wrap: normal; word-break: normal; color: #ff0000;">再次运行：</span></p>
<p style="margin: 0px; padding: 0px; color: #323e32; font-family: simsun; font-size: 16px; background-color: #ffffff; border: 0px; list-style: none; word-wrap: normal; word-break: normal;">- (void)applicationWillEnterFore<wbr style="line-height: 28px;">ground:(UIApplication *)application</p>
<p style="margin: 0px; padding: 0px; color: #323e32; font-family: simsun; font-size: 16px; background-color: #ffffff; border: 0px; list-style: none; word-wrap: normal; word-break: normal;">- (void)applicationDidBecomeActi<wbr style="line-height: 28px;">ve:(UIApplication *)application</p>
<p style="margin: 0px; padding: 0px; color: #323e32; font-family: simsun; font-size: 16px; background-color: #ffffff; border: 0px; list-style: none; word-wrap: normal; word-break: normal;">&nbsp;<wbr style="line-height: 28px;"></p>
<p style="margin: 0px; padding: 0px; color: #323e32; font-family: simsun; font-size: 16px; background-color: #ffffff; border: 0px; list-style: none; word-wrap: normal; word-break: normal;"><span style="word-wrap: normal; word-break: normal; color: #ff0000;">再次关闭：</span></p>
<p style="margin: 0px; padding: 0px; color: #323e32; font-family: simsun; font-size: 16px; background-color: #ffffff; border: 0px; list-style: none; word-wrap: normal; word-break: normal;">- (void)applicationWillResignAct<wbr style="line-height: 28px;">ive:(UIApplication *)application</p>
<p style="margin: 0px; padding: 0px; color: #323e32; font-family: simsun; font-size: 16px; background-color: #ffffff; border: 0px; list-style: none; word-wrap: normal; word-break: normal;">- (void)applicationDidEnterBackg<wbr style="line-height: 28px;">round:(UIApplication *)application</p>
</div>
<div><br />
</div>
<div>本文转自：http://friendlysong.blog.163.com/blog/static/3225243920128144251666/</div><img src ="http://www.cppblog.com/wanghaiguang/aggbug/207884.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/wanghaiguang/" target="_blank">王海光</a> 2014-08-01 13:31 <a href="http://www.cppblog.com/wanghaiguang/archive/2014/08/01/207884.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>UIGestureRecognizer学习笔记（转载）——手势识别功能</title><link>http://www.cppblog.com/wanghaiguang/archive/2014/07/29/207854.html</link><dc:creator>王海光</dc:creator><author>王海光</author><pubDate>Tue, 29 Jul 2014 05:35:00 GMT</pubDate><guid>http://www.cppblog.com/wanghaiguang/archive/2014/07/29/207854.html</guid><wfw:comment>http://www.cppblog.com/wanghaiguang/comments/207854.html</wfw:comment><comments>http://www.cppblog.com/wanghaiguang/archive/2014/07/29/207854.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/wanghaiguang/comments/commentRss/207854.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/wanghaiguang/services/trackbacks/207854.html</trackback:ping><description><![CDATA[&nbsp;&nbsp;&nbsp;&nbsp; 摘要: UIGestureRecognizer&nbsp;是一个具体手势的基类，提供了较为简单的手势实现方式 &nbsp;The concrete subclasses of&nbsp;UIGestureRecognizer&nbsp;are the following:UITapGestureRecognizerUIPinchGestureRecognizerUIRotationGestureRecog...&nbsp;&nbsp;<a href='http://www.cppblog.com/wanghaiguang/archive/2014/07/29/207854.html'>阅读全文</a><img src ="http://www.cppblog.com/wanghaiguang/aggbug/207854.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/wanghaiguang/" target="_blank">王海光</a> 2014-07-29 13:35 <a href="http://www.cppblog.com/wanghaiguang/archive/2014/07/29/207854.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>iOS 添加libxml2.dylb 后  找不到&lt;libxml/tree.h&gt; 头文件</title><link>http://www.cppblog.com/wanghaiguang/archive/2014/07/15/207651.html</link><dc:creator>王海光</dc:creator><author>王海光</author><pubDate>Tue, 15 Jul 2014 05:50:00 GMT</pubDate><guid>http://www.cppblog.com/wanghaiguang/archive/2014/07/15/207651.html</guid><wfw:comment>http://www.cppblog.com/wanghaiguang/comments/207651.html</wfw:comment><comments>http://www.cppblog.com/wanghaiguang/archive/2014/07/15/207651.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/wanghaiguang/comments/commentRss/207651.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/wanghaiguang/services/trackbacks/207651.html</trackback:ping><description><![CDATA[<span style="font-size: 14pt; font-family: Verdana;">在</span><span style="color: #333333; font-family: Verdana; background-color: #ffffff; font-size: 14pt;">&#8220;Header Search Paths&#8221; 中添加</span><span style="color: #333333; font-family: Verdana; font-size: 14pt; background-color: #ffffff;">&#8220;/usr/include/libxml2&#8243; <br /></span><span style="color: #333333; font-family: Verdana; font-size: 14pt; background-color: #ffffff;">在</span><span style="color: #333333; font-family: Verdana; background-color: #ffffff; font-size: 14pt;">&#8220;Other Linker Flags&#8221;添加</span><span style="color: #333333; font-family: Verdana; font-size: 14pt; background-color: #ffffff;">&#8220;-lxml2&#8243;&nbsp;<br /></span><span style="color: #333333; font-family: Verdana; font-size: 14pt; background-color: #ffffff;">运行后出现错误找不到</span><span style="font-size: 14pt; font-family: Verdana;">&lt;libxml/tree.h&gt;<br /><br /></span><span style="font-size: 14pt; font-family: Verdana;">&nbsp;解决办法：</span><span style="font-size: 14pt; font-family: Verdana;">在</span><span style="color: #333333; font-family: Verdana; background-color: #ffffff; font-size: 14pt;">&#8220;Header Search Paths&#8221; 中添加</span><span style="background-color: #ffffff;">&nbsp;</span><span style="color: red; font-family: Verdana; font-size: 14pt; background-color: #ffffff;">${SDKROOT}</span><span style="color: #333333; font-family: Verdana; font-size: 14pt; background-color: #ffffff;"><strong>/usr/include/libxml2</strong></span><img src ="http://www.cppblog.com/wanghaiguang/aggbug/207651.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/wanghaiguang/" target="_blank">王海光</a> 2014-07-15 13:50 <a href="http://www.cppblog.com/wanghaiguang/archive/2014/07/15/207651.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item></channel></rss>