<?xml version="1.0" encoding="utf-8"?><feed xmlns="http://www.w3.org/2005/Atom"><title type="text">博客园_小小草</title><subtitle type="text">我是一棵小小草。专注于企业信息化应用</subtitle><id>http://feed.cnblogs.com/blog/u/2292/rss</id><updated>2011-11-10T00:50:05Z</updated><author><name>小草</name><uri>http://www.cnblogs.com/liubiqu/</uri></author><generator>CNBlogs BlogServer</generator><link rel="alternate" type="text/html" href="http://www.cnblogs.com/liubiqu/"/><link rel="self" type="application/atom+xml" href="http://feed.cnblogs.com/blog/u/2292/rss"/><entry><id>http://www.cnblogs.com/liubiqu/archive/2011/11/10/2243945.html</id><title type="text">浅谈项目与产品的区别</title><summary type="text">项目可能是为一个或多个问题而立项，第一阶段大部分是为了实现传统手工操作的数据化以及数据的共享；产品是解决一类用户的某几个（&amp;lt;5）问题而产生。项目可能由一个或者多个产品结合而成；产品可能由多个项目的成功...</summary><published>2011-11-10T00:49:00Z</published><updated>2011-11-10T00:49:00Z</updated><author><name>小草</name><uri>http://www.cnblogs.com/liubiqu/</uri></author><link rel="alternate" href="http://www.cnblogs.com/liubiqu/archive/2011/11/10/2243945.html"/><link rel="alternate" type="text/html" href="http://www.cnblogs.com/liubiqu/archive/2011/11/10/2243945.html"/><content type="html">&lt;p&gt;项目可能是为一个或多个问题而立项，第一阶段大部分是为了实现传统手工操作的数据化以及数据的共享；产品是解决一类用户的某几个（&amp;lt;5）问题而产生。项目可能由一个或者多个产品结合而成；产品可能由多个项目的成功验验抽象出来。&#xD;
&lt;/p&gt;&lt;p&gt;做产品需要很好的抽象能力，紧紧围绕用户的价值诉求，提供最专业化最高效最全面的解决办法，让用户可以快速解决某个问题，并且可以通过产品提供的一个或者多个办法解决特定的问题。做产品需要更多全面的思考与思路的拓展创新，给人一种惊喜的感觉：原来事情还可以这样子处理，Apple就是最好的例子。 &#xD;
&lt;/p&gt;&lt;p&gt;做项目需要很好的理解能力，可以快速抓住需求的要点，当然也可以找到核心的诉求点，从根本上做一些业务的调整与创意，但这对于项目来说未必是好事，因为推广新思路的成本远远比项目本身来的困难多了，大多数项目失败也是因为有过多的创新与改革，需要改变原有管理或者操作模式，造成用户抵触情绪很大。 &#xD;
&lt;/p&gt;&lt;p&gt;做好项目最重要的是了解用户的实际使用场景，更方便高效的解决业务操作问题；做产品最重要是更好的抽象，找到共同的诉求点，通过多种方式来实现这个诉求。做好项目最重要的是了解用户的实际使用的场景，更方便高效的解决业务操作问题；做产品最重要的是更好的抽象与找到共同的诉求点，通过多种方式来实现这个诉求。&#xD;
&lt;/p&gt;&lt;p&gt;我对于项目可以说游刃有余，对于产品只能说捉禁见肘。我的小脑袋瓜子可能做做项目还是挺实用的，毕竟做了十年了，对于快速抓住用户的需求，提供更好的解决办法还是有一定的经验。但对于产品一直不太敢于触碰，一是产品的周期比较长，自己也没有什么资源与机会；二来是因为自己水平比较差达不到一定的层次，无法掌握大局；第三个就是接触的用户数量还没有达到一定的级别。现在终于有机会接触到产品了，但也有很大的感触。一个产品的周期一般都是两三年以上，目前我呆了快两年了，只能说有一定的小体会。&#xD;
&lt;/p&gt;&lt;p&gt;产品本身可能并不会像想象的那么困难，最困难的在于团队组成与管理。（说明：这里是总结互联网产品，与传统的产品可能会有所不同）&#xD;
&lt;/p&gt;&lt;ol style="margin-left: 40pt"&gt;&lt;li&gt;产品策划&#xD;
&lt;/li&gt;&lt;/ol&gt;&lt;p&gt;在产品策划的前期可以天马行空，最困难的就是无法统一意见，来自市场、技术、业务等各类专业人员的意见非常多，侧重点也不同，没有一个核心的人物来统一思路是非常耗费时间与精力的，很多产品可能在这个阶段就腰斩了。&#xD;
&lt;/p&gt;&lt;ol style="margin-left: 40pt"&gt;&lt;li&gt;技术实现&#xD;
&lt;/li&gt;&lt;/ol&gt;&lt;p&gt;对于技术的实现有太多的选择与判断，我的标准就是以最熟悉的技术来最快速的实现产品的功能，快速推出产品，接受客户的检验。但这也存在一定的问题，比如用户刚体验发现功能比较一般，没有什么创新，下次就可能不会再体验了。&#xD;
&lt;/p&gt;&lt;ol style="margin-left: 40pt"&gt;&lt;li&gt;产品推广&#xD;
&lt;/li&gt;&lt;/ol&gt;&lt;p&gt;需要在茫茫人海中寻找用户还是需要一定的方法与技巧，对于这块内容我不会，也不做过多的说明。我只知道"酒香也怕巷子深"，目前市场上的产品让人眼花缭乱，要让你的产品脱颖而出并不是件容易的事情。&#xD;
&lt;/p&gt;&lt;ol style="margin-left: 40pt"&gt;&lt;li&gt;产品运维&#xD;
&lt;/li&gt;&lt;/ol&gt;&lt;p&gt;能走到这步的可能已经不多了，我们的项目还没有到这个阶段，估计问题会更多，比如服务器的性能、数据的安全、攻击的防御、大数据量应用等。&lt;/p&gt; &lt;img src="http://www.cnblogs.com/liubiqu/aggbug/2243945.html?type=1" width="1" height="1" alt=""/&gt;&lt;p&gt;&lt;a href="http://www.cnblogs.com/liubiqu/archive/2011/11/10/2243945.html" target="_blank"&gt;本文链接&lt;/a&gt;&lt;/p&gt;</content></entry><entry><id>http://www.cnblogs.com/liubiqu/archive/2011/11/02/2232784.html</id><title type="text">xcode4.2开发最新的ios5应用，分享snow版本下载地址</title><summary type="text">一直以为xcode4.2只支持lion系统，后来发现新版本支持snow，昨晚下载完成，上午安装成功了，这回可以编译支持ios5的应用了。看到AppStore里好多应用都升级了，就因为需要支持iOS5，难道iOS5不兼容原来的应用？升级到xcode4.2 for snowleopard 原先的项目在4.3.3的模拟器下正常，但最新的ios5就是编译不过去，看来确实需要做一些调整才可以支持ios5，后续将继续完善关于升级到ios5的相关修改内容。</summary><published>2011-11-02T03:14:00Z</published><updated>2011-11-02T03:14:00Z</updated><author><name>小草</name><uri>http://www.cnblogs.com/liubiqu/</uri></author><link rel="alternate" href="http://www.cnblogs.com/liubiqu/archive/2011/11/02/2232784.html"/><link rel="alternate" type="text/html" href="http://www.cnblogs.com/liubiqu/archive/2011/11/02/2232784.html"/><content type="html">&lt;p&gt;&lt;a  href="http://s.weibo.com/weibo/iPhone%25E5%25BC%2580%25E5%258F%2591"&gt;#iPhone开发#&lt;/a&gt;一直以为xcode4.2只支持lion系统，后来发现新版本支持snow，昨晚下载完成，上午安装成功了，这回可以编译支持ios5的应用了。&lt;/p&gt;&#xD;
&lt;p&gt;&lt;/p&gt;&#xD;
&lt;p&gt;看到AppStore里好多应用都升级了，就因为需要支持iOS5，难道iOS5不兼容原来的应用？&lt;/p&gt;&#xD;
&lt;p&gt;升级到xcode4.2 for snowleopard 原先的项目在4.3.3的模拟器下正常，但最新的ios5就是编译不过去，看来确实需要做一些调整才可以支持ios5，后续将继续完善关于升级到ios5的相关修改内容。&lt;/p&gt;&#xD;
&lt;p&gt;&lt;/p&gt;&#xD;
&lt;p&gt;1、【ASIHTTPRequest升级】&lt;/p&gt;&#xD;
&lt;p&gt;ASIHTTPRequest组件升级到ios5编译错误的解决办法，移除libz.1.2.3.dylib的引用，改为libz.1.2.5.dylib引用就可以正常了，同时把组件升级到最新的版本即可。&lt;/p&gt;&#xD;
&lt;p&gt;&lt;/p&gt;&#xD;
&lt;p&gt;2、xcode4.2对于内存泄漏的检测更加全面与细致，使用起来更方便了。&lt;/p&gt;&#xD;
&lt;p&gt;例如：cell.backgroundView = [UIView alloc]initWithFrame:cell.frame];&amp;nbsp; 这个语句在4.0.2里不会提示有内存泄漏，但在4.2中就会提醒了。正确的写法是：&lt;/p&gt;&#xD;
&lt;p&gt;UIView&amp;nbsp;*backView= [UIView alloc]initWithFrame:cell.frame]; &lt;/p&gt;&#xD;
&lt;p&gt;cell.backgroundView = backView;&lt;/p&gt;&#xD;
&lt;p&gt;[backView release];&amp;nbsp;&lt;/p&gt;&#xD;
&lt;p&gt;3、SVN配置，不支持IP连接，&lt;span style="font-family: Calibri"&gt;提示&lt;/span&gt;&lt;span style="font-family: Tahoma"&gt;&amp;nbsp;&amp;nbsp;host is unreachable&lt;/span&gt;&lt;/p&gt;&#xD;
&lt;p&gt;首先需要修改host文件&lt;br /&gt;sudo vim /private/etc/hosts&lt;br /&gt;在最下面插入一行&lt;br /&gt;192.168.32.132 &amp;nbsp; &amp;nbsp; &amp;nbsp;svnserver &lt;br /&gt;然后关闭xcode再重启几次机子。多试几次可能就会成功了。&lt;/p&gt;&#xD;
&lt;p&gt;&lt;/p&gt;&#xD;
&lt;p&gt;我根据这个方法试了一个下午终于搞定了。方法肯定是对的，只是需要点耐心。&lt;br /&gt;&amp;nbsp;&lt;/p&gt;&#xD;
&lt;p&gt;4、图标设置&lt;/p&gt;&#xD;
&lt;p&gt;如果想自己控制图标的显示效果，可以直接修改plist文件就可以。新增一个属性，找到Icon already includes gloss effects，然后把这个属性设为YES，即图标已经实现了高光修饰效果，不使用系统的效果。安装的软件的图标就没有了默认的高光效果了。&lt;/p&gt;&#xD;
&lt;p&gt;iOS5里这样设置不生效，需要打开plist文件中展开Icon files(iOS 5)子项Primary Icon的子项Icon already includes gloss effects&lt;/p&gt;&#xD;
&lt;p&gt;&lt;/p&gt;&#xD;
&lt;p&gt;&lt;/p&gt;&#xD;
&lt;p&gt;分享下载的种子文件。 &lt;a title="http://vdisk.weibo.com/s/ZYcF/1320201501" href="http://t.cn/S71uvk" target="_blank" mt="url" action-type="feed_list_url"&gt;http://t.cn/S71uvk&lt;/a&gt; &lt;/p&gt;&#xD;
&lt;p&gt;&lt;/p&gt;&#xD;
&lt;p&gt;更多细节可以关注微博：&lt;a href="http://weibo.com/eulbq"&gt;&lt;font color="#075db3"&gt;http://weibo.com/eulbq&lt;/font&gt;&lt;/a&gt;&lt;/p&gt;&lt;img src="http://www.cnblogs.com/liubiqu/aggbug/2232784.html?type=1" width="1" height="1" alt=""/&gt;&lt;p&gt;&lt;a href="http://www.cnblogs.com/liubiqu/archive/2011/11/02/2232784.html" target="_blank"&gt;本文链接&lt;/a&gt;&lt;/p&gt;</content></entry><entry><id>http://www.cnblogs.com/liubiqu/archive/2011/10/26/2225147.html</id><title type="text">xCode 4.X 免证书真机发布及调试</title><summary type="text">由于没有购买苹果的开发者证书，所以目前大多数开发环境都是使用以下的方式实现开发与真机测试（本文部分摘自网络）使用环境：越狱过的iPhone 机器 Mac OS 10.6.8 xCode ...</summary><published>2011-10-26T05:54:00Z</published><updated>2011-10-26T05:54:00Z</updated><author><name>小草</name><uri>http://www.cnblogs.com/liubiqu/</uri></author><link rel="alternate" href="http://www.cnblogs.com/liubiqu/archive/2011/10/26/2225147.html"/><link rel="alternate" type="text/html" href="http://www.cnblogs.com/liubiqu/archive/2011/10/26/2225147.html"/><content type="html">&lt;p&gt;&lt;span style="font-size:12pt"&gt;由于没有购买苹果的开发者证书，所以目前大多数开发环境都是使用以下的方式实现开发与真机测试（本文部分摘自网络）&#xD;
&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-size:12pt"&gt;使用环境：越狱过的iPhone 机器    Mac OS  10.6.8    xCode 4.0.1 及Xcode4.0.2&#xD;
&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&amp;#160;&lt;/p&gt;&lt;p&gt;&lt;span style="font-size:12pt"&gt;操作步骤过程：&#xD;
&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-size:12pt"&gt;（一）制作证书&#xD;
&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-size:12pt"&gt;1、 打开 &amp;#160; Finder－&amp;gt;应用程序－&amp;gt;实用工具 -&amp;gt;&amp;#160; 钥匙串访问&amp;#160;&#xD;
&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-size:12pt"&gt;2、单击："钥匙串访问"选择&amp;#160; "证书" 再选择"创建证书"过程如下图：&#xD;
&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;a href="http://photo.blog.sina.com.cn/showpic.html"&gt;&lt;img src="http://images.cnblogs.com/cnblogs_com/liubiqu/201110/201110261354057979.png" alt="" border="0"/&gt;&lt;/a&gt;&lt;span style="font-size:12pt"&gt;&#xD;
		&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&amp;#160;&#xD;
&amp;#160;&lt;/p&gt;&lt;p&gt;&lt;span style="font-size:12pt"&gt;3、证书名称必须填写为："iPhone Developer" ，（不能随便填写）然后点击"创建"。(如图）&#xD;
&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;a href="http://photo.blog.sina.com.cn/showpic.html"&gt;&lt;img src="http://images.cnblogs.com/cnblogs_com/liubiqu/201110/201110261354068012.png" alt="" border="0"/&gt;&lt;/a&gt;&lt;span style="font-size:12pt"&gt;&#xD;
		&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&amp;#160;&#xD;
&amp;#160;&lt;/p&gt;&lt;p&gt;&lt;a href="http://photo.blog.sina.com.cn/showpic.html"&gt;&lt;img src="http://images.cnblogs.com/cnblogs_com/liubiqu/201110/201110261354069997.png" alt="" border="0"/&gt;&lt;/a&gt;&lt;span style="font-size:12pt"&gt;&#xD;
		&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&amp;#160;&#xD;
&amp;#160;&lt;/p&gt;&lt;p&gt;&lt;a href="http://photo.blog.sina.com.cn/showpic.html"&gt;&lt;img src="http://images.cnblogs.com/cnblogs_com/liubiqu/201110/201110261354068394.png" alt="" border="0"/&gt;&lt;/a&gt;&lt;span style="font-size:12pt"&gt;&#xD;
		&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&amp;#160;&#xD;
&amp;#160;&lt;/p&gt;&lt;p&gt;&lt;a href="http://photo.blog.sina.com.cn/showpic.html"&gt;&lt;img src="http://images.cnblogs.com/cnblogs_com/liubiqu/201110/201110261354071525.png" alt="" border="0"/&gt;&lt;/a&gt;&lt;span style="font-size:12pt"&gt;&#xD;
		&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&amp;#160;&#xD;
&amp;#160;&lt;/p&gt;&lt;p&gt;&lt;a href="http://photo.blog.sina.com.cn/showpic.html"&gt;&lt;img src="http://images.cnblogs.com/cnblogs_com/liubiqu/201110/201110261354073194.png" alt="" border="0"/&gt;&lt;/a&gt;&lt;span style="font-size:12pt"&gt;&#xD;
		&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&amp;#160;&#xD;
&amp;#160;&lt;/p&gt;&lt;p&gt;&lt;a href="http://photo.blog.sina.com.cn/showpic.html"&gt;&lt;img src="http://images.cnblogs.com/cnblogs_com/liubiqu/201110/201110261354089083.png" alt="" border="0"/&gt;&lt;/a&gt;&lt;span style="font-size:12pt"&gt;&#xD;
		&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&amp;#160;&#xD;
&amp;#160;&lt;/p&gt;&lt;p&gt;&lt;a href="http://photo.blog.sina.com.cn/showpic.html"&gt;&lt;img src="http://images.cnblogs.com/cnblogs_com/liubiqu/201110/201110261354082180.png" alt="" border="0"/&gt;&lt;/a&gt;&lt;span style="font-size:12pt"&gt;&#xD;
		&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&amp;#160;&#xD;
&amp;#160;&lt;/p&gt;&lt;p&gt;&lt;a href="http://photo.blog.sina.com.cn/showpic.html"&gt;&lt;img src="http://images.cnblogs.com/cnblogs_com/liubiqu/201110/201110261354086117.png" alt="" border="0"/&gt;&lt;/a&gt;&lt;span style="font-size:12pt"&gt;&#xD;
		&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&amp;#160;&#xD;
&amp;#160;&lt;/p&gt;&lt;p&gt;&lt;a href="http://photo.blog.sina.com.cn/showpic.html"&gt;&lt;img src="http://images.cnblogs.com/cnblogs_com/liubiqu/201110/201110261354095278.png" alt="" border="0"/&gt;&lt;/a&gt;&lt;span style="font-size:12pt"&gt;&#xD;
		&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&amp;#160;&#xD;
&amp;#160;&lt;/p&gt;&lt;p&gt;&lt;span style="font-size:12pt"&gt;&amp;#160;(二)修改xcode配置文件&#xD;
&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-size:12pt"&gt;注意：由于这些配置文件是系统文件，修改系统文件需要管理员权限才可以进行操作，所以保存的时候不能直接保存，会遇到系统提示"你没有修改此文件得权限"，但可以保存一个副本。可以先修改这个副本，然后再复制到原先的目录，系统会提示你是否修改替换，选择"替换"，这时候是需要管理员密码才可以覆盖原来的文件，输入密码后，修改完成。&#xD;
&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&amp;#160;&#xD;
&amp;#160;&lt;/p&gt;&lt;p&gt;&lt;span style="font-size:12pt"&gt;1.修改SDKsettings.plist文件。&#xD;
&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-size:12pt"&gt;找到 "&amp;#160; /Developer/Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS4.3.sdk "下得&amp;#160; SDKSettings.plist&amp;#160; 文件，修改"Default Properties "项下面得 "CODE_SIGNING_REQUIRED "得值为：NO。&#xD;
&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&amp;#160;&#xD;
&amp;#160;&lt;/p&gt;&lt;p&gt;&lt;span style="font-size:12pt"&gt;2.修改"/Developer/Platforms/iPhoneOS.platform/Info.plist"文件（用文本编辑器或者Xcode打开）：&#xD;
&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;img src="http://images.cnblogs.com/cnblogs_com/liubiqu/201110/201110261354098343.png" alt=""/&gt;&lt;span style="font-size:12pt"&gt;&#xD;
		&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-size:12pt"&gt;增加两项：&#xD;
&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-size:12pt"&gt;PROVISIONING_PROFILE_ALLOWED = NO&#xD;
&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-size:12pt"&gt;PROVISIONING_PROFILE_REQUIRED = NO&#xD;
&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-size:12pt"&gt;效果如下图所示：&#xD;
&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;img src="http://images.cnblogs.com/cnblogs_com/liubiqu/201110/201110261354092279.png" alt=""/&gt;&lt;span style="font-size:12pt"&gt;&#xD;
		&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-size:12pt"&gt;然后将所有"XCiPhoneOSCodeSignContext"替换为"XCCodeSignContext"。&#xD;
&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;img src="http://images.cnblogs.com/cnblogs_com/liubiqu/201110/201110261354096772.png" alt=""/&gt;&lt;span style="font-size:12pt"&gt;&#xD;
		&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&amp;#160;&#xD;
&amp;#160;&lt;/p&gt;&lt;p&gt;&lt;span style="font-size:12pt"&gt;3.修改好配置文件后重启xcode，修改项目的属性&#xD;
&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-size:12pt"&gt;1）点击&amp;#160; 项目图标，找到"Build Settings"&amp;#160; 找到&amp;#160; "Code Sign Identity" &amp;#160;&#xD;
&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-size:12pt"&gt;按照下面得方式设置一下就可以 了。&#xD;
&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;img src="http://images.cnblogs.com/cnblogs_com/liubiqu/201110/201110261354108442.png" alt=""/&gt;&lt;span style="font-size:12pt"&gt;&#xD;
		&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-size:12pt"&gt;2） 设置工程属性：&#xD;
&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;img src="http://images.cnblogs.com/cnblogs_com/liubiqu/201110/201110261354105476.png" alt=""/&gt;&lt;span style="font-size:12pt"&gt;&#xD;
		&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&amp;#160;&#xD;
&amp;#160;&lt;/p&gt;&lt;p&gt;&lt;img src="http://images.cnblogs.com/cnblogs_com/liubiqu/201110/201110261354119413.png" alt=""/&gt;&lt;span style="font-size:12pt"&gt;&#xD;
		&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&amp;#160;&#xD;
&amp;#160;&lt;/p&gt;&lt;p&gt;&lt;span style="font-size:12pt"&gt;3）然后点击&amp;#160; "Run" 我们会看到工程正在编译，然后弹出如图提示（两次）：我们选择 "总是允许"&#xD;
&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;img src="http://images.cnblogs.com/cnblogs_com/liubiqu/201110/201110261354111398.png" alt=""/&gt;&lt;span style="font-size:12pt"&gt;&#xD;
		&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&amp;#160;&#xD;
&amp;#160;&lt;/p&gt;&lt;p&gt;&lt;span style="font-size:12pt"&gt;4）在项目中添加一个Entitlement.plist文件，设置允许调试。&#xD;
&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-size:12pt"&gt;注：若不操作该步可能连接真机调试的时候还会出现一个错误：Error&amp;#160;launching&amp;#160;remote&amp;#160;program:&amp;#160;failed&amp;#160;to&amp;#160;get&amp;#160;the&amp;#160;task&amp;#160;for&amp;#160;process&amp;#160;xxx&#xD;
&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&amp;#160;&#xD;
&amp;#160;&lt;/p&gt;&lt;p&gt;&lt;span style="font-size:12pt"&gt;操作步骤：在Xcode4.X&amp;#160; 中这样做：&#xD;
&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-size:12pt"&gt;a.在工程中按照这个执行创建一个名为：Entitlement.plist 文件In the File Menu, select New File -&amp;gt; iPhone OS -&amp;gt; Code Signing -&amp;gt; Entitlements. Name the file "Entitlements.plist" and click 'Finish'.&amp;#160;&#xD;
&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;img src="http://images.cnblogs.com/cnblogs_com/liubiqu/201110/201110261354113067.png" alt=""/&gt;&lt;span style="font-size:12pt"&gt;&#xD;
		&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-size:12pt"&gt;&amp;#160; &amp;#160; b.打开&amp;#160; 这个&amp;#160; "Entitlement.plist"文件，将 "Can be debugged"属性值改为 "YES"。&#xD;
&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;img src="http://images.cnblogs.com/cnblogs_com/liubiqu/201110/201110261354122544.png" alt=""/&gt;&lt;span style="font-size:12pt"&gt;&#xD;
		&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&amp;#160;&#xD;
&amp;#160;&lt;/p&gt;&lt;p&gt;&lt;span style="font-size:12pt"&gt;c.将Code Signing Entitlements 那项得值改为刚刚新建得"Entitlements.plist".&#xD;
&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;img src="http://images.cnblogs.com/cnblogs_com/liubiqu/201110/201110261354126513.png" alt=""/&gt;&lt;span style="font-size:12pt"&gt;&#xD;
		&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-size:12pt"&gt;4。提示选择完后：可以看到&#xD;
&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;img src="http://images.cnblogs.com/cnblogs_com/liubiqu/201110/201110261354122086.png" alt=""/&gt;&lt;span style="font-size:12pt"&gt;&#xD;
		&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-size:12pt"&gt;我们就可以看到 程序可以出现在 你得iphone上了。&#xD;
&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-size:12pt"&gt;当你运行程序时，可以通过 organizer 看到你得iphone 运行时打印出来得Log。&lt;/span&gt;&lt;/p&gt; &lt;img src="http://www.cnblogs.com/liubiqu/aggbug/2225147.html?type=1" width="1" height="1" alt=""/&gt;&lt;p&gt;&lt;a href="http://www.cnblogs.com/liubiqu/archive/2011/10/26/2225147.html" target="_blank"&gt;本文链接&lt;/a&gt;&lt;/p&gt;</content></entry><entry><id>http://www.cnblogs.com/liubiqu/archive/2011/10/24/2222431.html</id><title type="text">第一个iPhone版本应用发布</title><summary type="text">经过一个多月的努力终于把第一个版本完成了，虽然功能不太多，但确实花了比较多的精力去学习和研究。其实还有很多可以完善的地方，总感觉好像永远都做不完，经常会想到一些可以增加的功能。由于项目时间的关系，只能暂时到一个阶段，再加上已经超过比较多的原先的需求。功能上主要是配合网络平台进行客户端的操作，以浏览为主，结合部分手机的优势，比如拨打电话、发短信、导入本地通讯录等特色功能。</summary><published>2011-10-24T03:14:00Z</published><updated>2011-10-24T03:14:00Z</updated><author><name>小草</name><uri>http://www.cnblogs.com/liubiqu/</uri></author><link rel="alternate" href="http://www.cnblogs.com/liubiqu/archive/2011/10/24/2222431.html"/><link rel="alternate" type="text/html" href="http://www.cnblogs.com/liubiqu/archive/2011/10/24/2222431.html"/><content type="html">&lt;p&gt;&lt;span style="font-family: 宋体; font-size: 10pt"&gt;经过一个多月的努力终于把第一个版本完成了，虽然功能不太多，但确实花了比较多的精力去学习和研究。其实还有很多可以完善的地方，总感觉好像永远都做不完，经常会想到一些可以增加的功能。由于项目时间的关系，只能暂时到一个阶段，再加上已经超过比较多的原先的需求。功能上主要是配合网络平台进行客户端的操作，以浏览为主，结合部分手机的优势，比如拨打电话、发短信、导入本地通讯录等特色功能。 &lt;/span&gt;&lt;/p&gt;&#xD;
&lt;p&gt;&lt;/p&gt;&#xD;
&lt;p&gt;&lt;img alt="" src="http://images.cnblogs.com/cnblogs_com/liubiqu/201110/201110241113251890.png" /&gt;&lt;span style="font-family: 宋体; font-size: 12pt"&gt;&amp;nbsp;&lt;img alt="" src="http://images.cnblogs.com/cnblogs_com/liubiqu/201110/201110241113274879.png" /&gt;&lt;/span&gt;&lt;/p&gt;&#xD;
&lt;p&gt;&lt;/p&gt;&#xD;
&lt;p&gt;&lt;span style="font-family: 宋体; font-size: 10pt"&gt;趁着周末有时间总结一下： &lt;/span&gt;&lt;/p&gt;&#xD;
&lt;p&gt;&lt;/p&gt;&#xD;
&lt;p&gt;&lt;span style="font-size: 10pt"&gt;1&lt;span style="font-family: 宋体"&gt;、总体的时间分配： &lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&#xD;
&lt;p&gt;&lt;span style="font-size: 10pt"&gt;&lt;span style="font-family: 宋体"&gt;最初的一两周都在研究与适应&lt;/span&gt;Mac&lt;span style="font-family: 宋体"&gt;环境，由于我的笔记本&lt;/span&gt;CPU&lt;span style="font-family: 宋体"&gt;不支持&lt;/span&gt;VT&lt;span style="font-family: 宋体"&gt;所以没有办法安装&lt;/span&gt;Mac&lt;span style="font-family: 宋体"&gt;系统，只能用公司的黑苹果，后来申请了&lt;/span&gt;Mac mini&lt;span style="font-family: 宋体"&gt;。除此之外还要搞好&lt;/span&gt;xcode&lt;span style="font-family: 宋体"&gt;的证书配置、真机调试等细节的问题。 &lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&#xD;
&lt;p&gt;&lt;span style="font-size: 10pt"&gt;&lt;span style="font-family: 宋体"&gt;用了一到两周时间适应&lt;/span&gt;Xcode&lt;span style="font-family: 宋体"&gt;及开发语言等。搞定自定义类、方法、委托等基础的知识。 &lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&#xD;
&lt;p&gt;&lt;span style="font-family: 宋体; font-size: 10pt"&gt;通过时间的磨练越来越有感觉，用了大半周的时间终于适应与解决内存泄漏的问题，解决闪退的问题。 &lt;/span&gt;&lt;/p&gt;&#xD;
&lt;p&gt;&lt;span style="font-family: 宋体; font-size: 10pt"&gt;一周多的时间增加组件，提升程序应用性，加入了异步加载、异步请求等操作。 &lt;/span&gt;&lt;/p&gt;&#xD;
&lt;p&gt;&lt;span style="font-family: 宋体; font-size: 10pt"&gt;中间最多的就是研究控件如何使用，还好网上的资源比较丰富，具体的问题一般都会有解决办法。 &lt;/span&gt;&lt;/p&gt;&#xD;
&lt;p&gt;&lt;/p&gt;&#xD;
&lt;p&gt;&lt;span style="font-size: 10pt"&gt;2&lt;span style="font-family: 宋体"&gt;、界面设计与交互 &lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&#xD;
&lt;p&gt;&lt;span style="font-size: 10pt"&gt;&lt;span style="font-family: 宋体"&gt;整体的感觉就是界面上不需要想太多，用最原始的控件处理业务也是非常的漂亮。不像&lt;/span&gt;Android&lt;span style="font-family: 宋体"&gt;平台很多都需要自定义界面，造成开发的麻烦与标准性不高。目前使用到最多的就是&lt;/span&gt;UITableView&lt;span style="font-family: 宋体"&gt;控件，用于列表显示与信息展示；而后是&lt;/span&gt;UIWebView&lt;span style="font-family: 宋体"&gt;控件来显示&lt;/span&gt;HTML&lt;span style="font-family: 宋体"&gt;的内容；整体布局使用&lt;/span&gt;UITabBarController&lt;span style="font-family: 宋体"&gt;，肯定会用到很多的&lt;/span&gt;NavBar&lt;span style="font-family: 宋体"&gt;。 &lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&#xD;
&lt;p&gt;&lt;span style="font-size: 10pt"&gt;3&lt;span style="font-family: 宋体"&gt;、学习资源比较少 &lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&#xD;
&lt;p&gt;&lt;span style="font-size: 10pt"&gt;&lt;span style="font-family: 宋体"&gt;开源的资源相对少一些，但&lt;/span&gt;SDK&lt;span style="font-family: 宋体"&gt;的功能确实挺强大。 &lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&#xD;
&lt;p&gt;&lt;/p&gt;&#xD;
&lt;p&gt;&lt;span style="font-size: 10pt"&gt;4&lt;span style="font-family: 宋体"&gt;、开源组件的使用 &lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&#xD;
&lt;p&gt;&lt;span style="font-size: 10pt"&gt;1)SBJSON&lt;span style="font-family: 宋体"&gt;用于解析&lt;/span&gt;Json&lt;span style="font-family: 宋体"&gt;格式的数据，由于网络传输的格式是&lt;/span&gt;Json&lt;span style="font-family: 宋体"&gt;所以这个组件肯定是必须的 &lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&#xD;
&lt;p&gt;&lt;span style="font-size: 10pt"&gt;2)ASIHTTP&lt;span style="font-family: 宋体"&gt;用于网络请求的处理，刚开始只是使用最原始的&lt;/span&gt;NSURLConnection&lt;span style="font-family: 宋体"&gt;，但后来发现使用&lt;/span&gt;ASIHTTP&lt;span style="font-family: 宋体"&gt;组件可以更好的控制请求队列以及图片上传、进度条显示等功能。 &lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&#xD;
&lt;p&gt;&lt;span style="font-size: 10pt"&gt;3&lt;span style="font-family: 宋体"&gt;）SDWebImage用于显示&lt;/span&gt;Web&lt;span style="font-family: 宋体"&gt;端图片的异步处理，结合&lt;/span&gt;TableView&lt;span style="font-family: 宋体"&gt;使用非常的方便。 &lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&#xD;
&lt;p&gt;&lt;span style="font-size: 10pt"&gt;4&lt;span style="font-family: 宋体"&gt;）MBProgressHUD用于显示进度条及等待的无限菊花，不过建议可以使用简化版本的SVProgressHUD这个更容易使用一些，后期会做一下调整 &lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&#xD;
&lt;p&gt;&lt;span style="font-size: 10pt"&gt;5&lt;span style="font-family: 宋体"&gt;）EGORefreshTableHeaderView用来实现微博刷新的功能，但目前还没有用得上的地方。 &lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&#xD;
&lt;p&gt;&lt;span style="font-family: 宋体; font-size: 10pt"&gt;总结这些内容其实在&lt;strong&gt;IOSBoilerplate&lt;/strong&gt;这个项目中已经整合好了，大家如果有兴趣可以直接下载该项目即可。不过我自己把每一个组件组合起来，在这个过程中也学习到了很多开发的技巧，多看一些开源的优秀代码对自我的提升有很大的作用。 &lt;/span&gt;&lt;/p&gt;&#xD;
&lt;p&gt;&lt;img alt="" src="http://images.cnblogs.com/cnblogs_com/liubiqu/201110/201110241113281664.png" /&gt;&lt;span style="font-family: 宋体; font-size: 12pt"&gt;&amp;nbsp;&lt;img alt="" src="http://images.cnblogs.com/cnblogs_com/liubiqu/201110/201110241113305766.png" /&gt;&lt;/span&gt;&lt;/p&gt;&#xD;
&lt;p&gt;&lt;span style="font-family: 宋体; font-size: 12pt"&gt;&amp;nbsp;&lt;/span&gt;&lt;/p&gt;&#xD;
&lt;p&gt;&lt;/p&gt;&#xD;
&lt;p&gt;&lt;span style="font-family: 宋体; font-size: 10pt"&gt;后续要增加的功能和用到的技术： &lt;/span&gt;&lt;/p&gt;&#xD;
&lt;p&gt;&lt;span style="font-size: 10pt"&gt;1&lt;span style="font-family: 宋体"&gt;）&lt;/span&gt;GPS&lt;span style="font-family: 宋体"&gt;的应用，结合地图信息可以计算距离提供时间安排的参考；提供相关的地图截图作为附件邮件发送等。 &lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&#xD;
&lt;p&gt;&lt;span style="font-size: 10pt"&gt;2&lt;span style="font-family: 宋体"&gt;）通讯录的强化，结合通讯录的数据作为数据来源之一，进行细致的加工处理 &lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&#xD;
&lt;p&gt;&lt;span style="font-size: 10pt"&gt;3&lt;span style="font-family: 宋体"&gt;）本地持久化处理，结合&lt;/span&gt;Sqlite&lt;span style="font-family: 宋体"&gt;进行数据的储备，增加该功能后需要再考虑数据同步更新的问题。 &lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&#xD;
&lt;p&gt;&lt;span style="font-size: 10pt"&gt;4&lt;span style="font-family: 宋体"&gt;）&lt;/span&gt;TableView&lt;span style="font-family: 宋体"&gt;的分页处理优化，支持拖动、手动分页等功能 &lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&#xD;
&lt;p&gt;&lt;span style="font-size: 10pt"&gt;5&lt;span style="font-family: 宋体"&gt;）增加&lt;/span&gt;View&lt;span style="font-family: 宋体"&gt;切换的动画效果 &lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&#xD;
&lt;p&gt;&lt;span style="font-size: 10pt"&gt;6&lt;span style="font-family: 宋体"&gt;）&lt;/span&gt;i&lt;span style="font-family: 宋体"&gt;Pad版本的研发。个人总感觉iPad应用才会更实际一些，不过目前iPad用的人可能会少一些，先把iPhone版本搞得完美一些再说。 &lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&#xD;
&lt;p&gt;&lt;span style="font-size: 10pt"&gt;7&lt;span style="font-family: 宋体"&gt;）结合&lt;/span&gt;UIImageView&lt;span style="font-family: 宋体"&gt;与&lt;/span&gt;PageControl&lt;span style="font-family: 宋体"&gt;做一个识人小游戏，增加&lt;/span&gt;CoverFlow&lt;span style="font-family: 宋体"&gt;的方式查看员工照片等。 &lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&#xD;
&lt;p&gt;&lt;/p&gt;&#xD;
&lt;p&gt;更多细节可以关注微博：&lt;a href="http://weibo.com/eulbq"&gt;http://weibo.com/eulbq&lt;/a&gt;&lt;/p&gt;&#xD;
&lt;p&gt;&lt;span style="font-family: 宋体; font-size: 10pt"&gt;&amp;nbsp;&lt;/span&gt;&amp;nbsp;&lt;/p&gt;&lt;img src="http://www.cnblogs.com/liubiqu/aggbug/2222431.html?type=1" width="1" height="1" alt=""/&gt;&lt;p&gt;&lt;a href="http://www.cnblogs.com/liubiqu/archive/2011/10/24/2222431.html" target="_blank"&gt;本文链接&lt;/a&gt;&lt;/p&gt;</content></entry><entry><id>http://www.cnblogs.com/liubiqu/archive/2011/09/08/2171969.html</id><title type="text">【iPhone开发】说说Xcode4中xib绑定的原理</title><summary type="text">最开始的是时候始终没有弄明白xib文件中的绑定关系。经过一周的开发体验终于有一些理解与收获。 Xib文件就是MVC模式中的View这个层的界面显示布局的信息。即类似Asp.net的aspx文件或者java中的jsp文件。完全就是一个界面展示控制的文件，存储方式是xml文件格式，可以手动编辑与修改。但我还没有细致的研究xml文件内容本身。</summary><published>2011-09-08T15:53:00Z</published><updated>2011-09-08T15:53:00Z</updated><author><name>小草</name><uri>http://www.cnblogs.com/liubiqu/</uri></author><link rel="alternate" href="http://www.cnblogs.com/liubiqu/archive/2011/09/08/2171969.html"/><link rel="alternate" type="text/html" href="http://www.cnblogs.com/liubiqu/archive/2011/09/08/2171969.html"/><content type="html">&lt;p&gt;最开始的是时候始终没有弄明白xib文件中的绑定关系。经过一周的开发体验终于有一些理解与收获。&#xD;
&lt;/p&gt;&lt;p&gt;Xib文件就是MVC模式中的View这个层的界面显示布局的信息。即类似Asp.net的aspx文件或者java中的jsp文件。完全就是一个界面展示控制的文件，存储方式是xml文件格式，可以手动编辑与修改。但我还没有细致的研究xml文件内容本身。&#xD;
&lt;/p&gt;&lt;p&gt;所有的关联与绑定的信息都存储在xib文件中，头文件与实现类没有任何记录绑定信息的东西。&#xD;
&lt;/p&gt;&lt;p&gt;所有的xib中的控件及关联绑定信息都可以通过.m文件的中的代码进行实现。所以xib文件不是必须的，但为了更好的可视化编程建议还是使用。&#xD;
&lt;/p&gt;&lt;p&gt;&lt;span style="color: red;"&gt;&lt;strong&gt;第一步：设置File's Owner的class属性&#xD;
&lt;/strong&gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="color: red;"&gt;&lt;strong&gt;在xib文件中有一个最重要的就是File's Owner，这个对象指的就是Class属性中设定的那个类的对象。只有设定了Class属性中的类才有办法进行xib界面上的控件与IBOutlet与IBAction的绑定关联。也就是说要先检查xib文件中的File's Owner的属性Class是否设置正确，然后再去设置对应的Outlet与Action。即设置了File's Owner对应的实体类之后Xcode就知道这个实体类有哪些IBOutet与IBAction，这样在拖动进行连接的时候就会显示实体类的头文件中定义好的IBOulet与IBAction。&#xD;
&lt;/strong&gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;img alt="" src="http://images.cnblogs.com/cnblogs_com/liubiqu/201109/201109082352272810.png" /&gt;&lt;span style="color: red;"&gt;&lt;strong&gt;&#xD;
			&lt;/strong&gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;注：如果是通过模板创建的新ViewController则自动会设定这个属性。&#xD;
&lt;/p&gt;&lt;p&gt;&lt;strong&gt;第二步：在头文件中声明IBOutet与IBAction&#xD;
&lt;/strong&gt;&lt;/p&gt;&lt;p&gt;在头文件中声明IBOutlet与IBAction这两个作用就是让编译器知道这些属性与事件调用是公共给界面调用的。IBAction就好比jsp Servlet，在jsp文件中Form标签要设置一个Action，这个Action就是指向某个Servlet，就是受理请求的动作。IBOutet就是把界面（xib）中的对象读取到实现类中，这样就可以在实现类中对这些界面控件进行属性的设置，从而改为界面的展示。&#xD;
&lt;/p&gt;&lt;p&gt;&lt;img alt="" src="http://images.cnblogs.com/cnblogs_com/liubiqu/201109/201109082352298091.png" /&gt;&lt;span style="color: red;"&gt;&lt;strong&gt;&#xD;
			&lt;/strong&gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;strong&gt;第三步：在xib编辑器中（IB）进行关联绑定&#xD;
&lt;/strong&gt;&lt;/p&gt;&lt;p&gt;通过右键拖动或者Ctrl+左键拖动即可关联界面控件与实现类的IBOulet或IBAction即可完成界面编辑与绑定的操作。&#xD;
&lt;/p&gt; &#xD;
   &lt;img src="http://www.cnblogs.com/liubiqu/aggbug/2171969.html?type=1" width="1" height="1" alt=""/&gt;&lt;p&gt;&lt;a href="http://www.cnblogs.com/liubiqu/archive/2011/09/08/2171969.html" target="_blank"&gt;本文链接&lt;/a&gt;&lt;/p&gt;</content></entry><entry><id>http://www.cnblogs.com/liubiqu/archive/2011/09/08/2171936.html</id><title type="text">【iPhone开发】XCode4开发iPhone应用的体验</title><summary type="text">开始学习iPhone开发已经有半个多月了，因为项目需要进行了iPhone开发的体验。学习的途径刚开始就是两本书《iPhone 4与iPad开发基础教程》和《IPHONE 4应用程序开发入门与实战》</summary><published>2011-09-08T15:10:00Z</published><updated>2011-09-08T15:10:00Z</updated><author><name>小草</name><uri>http://www.cnblogs.com/liubiqu/</uri></author><link rel="alternate" href="http://www.cnblogs.com/liubiqu/archive/2011/09/08/2171936.html"/><link rel="alternate" type="text/html" href="http://www.cnblogs.com/liubiqu/archive/2011/09/08/2171936.html"/><content type="html">&lt;p&gt;开始学习iPhone开发已经有半个多月了，因为项目需要进行了iPhone开发的体验。学习的途径刚开始就是两本书《iPhone 4与iPad开发基础教程》和《IPHONE 4应用程序开发入门与实战》，另外还有一本《iPhone开发秘籍(第2版)》但还没有时间看。&#xD;
&lt;/p&gt;&lt;p&gt;&lt;img src="http://images.cnblogs.com/cnblogs_com/liubiqu/201109/201109082310121145.png" alt=""/&gt;&#xD;
		&lt;img src="http://images.cnblogs.com/cnblogs_com/liubiqu/201109/201109082310149490.png" alt=""/&gt;&#xD;
	&lt;/p&gt;&lt;p&gt;由于书中主要是使用XCode3.2作为截图与操作方法进行解释与操作示例，所以才有这篇文章的诞生。有些特性可能不是Xcode4新有的，但是却是window开发人员没有体验过的。&#xD;
&lt;/p&gt;&lt;p&gt;一、集成窗口&#xD;
&lt;/p&gt;&lt;p&gt;Xcode4把所有的界面放在了单一的窗口中，从此你不用为切换窗口而烦恼。这点在大部分Window下的开发工具都做到了，Xcode3.2版本还是需要把Interface Builder（简称IB）作为单独的程序，即双击xib文件需要打开新的窗口进行编辑，在4版本中则不需要。如下图所示：&#xD;
&lt;/p&gt;&lt;p&gt;&lt;img src="http://images.cnblogs.com/cnblogs_com/liubiqu/201109/201109082310203399.png" alt=""/&gt;&#xD;
	&lt;/p&gt;&lt;p&gt;最左边是项目浏览器，可以自定义文件的Group，不一定要跟文件目录结构一样。&#xD;
&lt;/p&gt;&lt;p&gt;左二是xib的编辑器即原来的Interface Builder，可以直接拖动控件到界面上，同时还提供界面结构显示。&#xD;
&lt;/p&gt;&lt;p&gt;最右边是属性窗口与工具栏，这个与vs.net等类似。比较好的一点的就是带了帮助的自动关联。另外所有的连接都可以通过这个属性窗口检查。&#xD;
&lt;/p&gt;&lt;p&gt;左三是xib设置的Class对应的头文件代码。&lt;strong&gt;&lt;span style="color:red"&gt;这个非常方便。&lt;/span&gt;可以直接&lt;span style="color:red"&gt;右键拖动（或者按Ctrl+鼠标拖动）&lt;/span&gt;某个控件到头文件中&lt;span style="color:red"&gt;连接或者创建&lt;/span&gt;IBOutlet属性或IBAction事件&lt;/strong&gt;。如下图所示：&#xD;
&lt;/p&gt;&lt;p&gt;&lt;img src="http://images.cnblogs.com/cnblogs_com/liubiqu/201109/201109082310235747.png" alt=""/&gt;&#xD;
	&lt;/p&gt;&lt;p&gt;二、模板改进&#xD;
&lt;/p&gt;&lt;p&gt;原先因为IB是独立的，所以创建xib文件需要手动去关联对应的Class，而现在只需要选择是否钩选生成xib文件即可自动生成两个文件的关联。&#xD;
&lt;/p&gt;&lt;p&gt;三、文件导航栏&#xD;
&lt;/p&gt;&lt;p&gt;在编辑窗口的最上面显示正在编辑文件的相关位置，可以快速的让你跳跃到你的上一级文件或者目录。如下图所示：&#xD;
&lt;/p&gt;&lt;p&gt;&lt;img src="http://images.cnblogs.com/cnblogs_com/liubiqu/201109/201109082310241909.png" alt=""/&gt;&#xD;
	&lt;/p&gt;&lt;p&gt;这个有两个好用的地方，一个是最左边有两个箭头，可以向前或者向后进行导航，快速切换代码文件。我比较常用的时候经常执行出错的时候会定位到main.m文件中，通过项目文件浏览器切换代码文件很麻烦，但通过这个箭头操作就很快。也可以使用快捷键 Ctrl+Command（黑苹果下就是win键）+左箭头即可以快速返回。&#xD;
&lt;/p&gt;&lt;p&gt;另外一个就是打开代码文件可以自动在右边显示对应的头文件，或者打开头文件（.h），自动显示实现的代码文件（.m），可以在右边的代码框的导航条上设置是自动跟着跳转还是手动。我习惯 设置为自动，这样子以后打开.m的文件就可以了，顺便就可以看到.h的文件信息。毕竟.h文件中代码量比较小。但感觉一个不习惯的地方就是没有办法实现代码文件的上下切分，这点估计在后面的版本中会有所改进。&#xD;
&lt;/p&gt;&lt;p&gt;四、代码提示&#xD;
&lt;/p&gt;&lt;p&gt;这个功能在win下的开发工具都有，但有点区别。提醒的代码可以按单词进行选中，比如输入 vi  可以提醒 viewWillAppear  ，你按一个Tab键就可以匹配到每一个单词view然后可以再输入W就可以快速匹配到viewWill这样子方便了许多。&#xD;
&lt;/p&gt;&lt;p&gt;五、多屏支持&#xD;
&lt;/p&gt;&lt;p&gt;Mac下的程序好像天生都支持多屏操作，使用起来非常的方便，Vs2010才开始支持多屏操作。&#xD;
&lt;/p&gt;&lt;p&gt;六、LLVM 编译器 2.0&#xD;
&lt;/p&gt;&lt;p&gt;LLVM 编译器是下一带开源的编译技术.完全支持C，Objective-C和C++。&#xD;
&lt;/p&gt;&lt;p&gt;LLVM 速度比GCC快两倍，建立的程序也会运行的更快。因为它更好的利用现代的芯片的结构。&#xD;
&lt;/p&gt;&lt;p&gt;LLVM和Xcode 4完全的整合在一起。包括关键字高亮，代码完整性等全都是由LLVM语法分析器来分析的。这样可以在编辑的时候就可以很好的了解你的代码。&#xD;
&lt;/p&gt;&lt;p&gt;因为使用了LLVM引擎，Xcode 4可以在编辑的时候就发现你代码中的错误而不需要经过你编译后才知道。&#xD;
&lt;/p&gt;&lt;p&gt;这个编译器的效率是非常高的，之前使用android编译及发布到模拟器速度是超级的慢，这个编译器几乎都控制在5秒以内，当然还要看机器的性能，我使用的是黑苹果所以可能更慢一些。&#xD;
&lt;/p&gt;&lt;p&gt;&amp;#160;&lt;/p&gt;  &lt;img src="http://www.cnblogs.com/liubiqu/aggbug/2171936.html?type=1" width="1" height="1" alt=""/&gt;&lt;p&gt;&lt;a href="http://www.cnblogs.com/liubiqu/archive/2011/09/08/2171936.html" target="_blank"&gt;本文链接&lt;/a&gt;&lt;/p&gt;</content></entry><entry><id>http://www.cnblogs.com/liubiqu/archive/2010/09/08/1821163.html</id><title type="text">多机多屏显示器实战</title><summary type="text">现在办公室的台式机配置了双屏。而且平常有时候会使用笔记本上外网。所以习惯使用双屏的情况下我的笔记本也想使用双屏。这样子的话，我的桌面上就得摆上三个液晶屏+笔记本显示器一共四个屏幕，有点过于嚣张了。今天研究了一下有一种办法可以减少一个显示器的办法。那就是两台机器共享一个屏幕。</summary><published>2010-09-08T01:44:00Z</published><updated>2010-09-08T01:44:00Z</updated><author><name>小草</name><uri>http://www.cnblogs.com/liubiqu/</uri></author><link rel="alternate" href="http://www.cnblogs.com/liubiqu/archive/2010/09/08/1821163.html"/><link rel="alternate" type="text/html" href="http://www.cnblogs.com/liubiqu/archive/2010/09/08/1821163.html"/><content type="html">&lt;p&gt;现在办公室的台式机配置了双屏。而且平常有时候会使用笔记本上外网。所以习惯使用双屏的情况下我的笔记本也想使用双屏。这样子的话，我的桌面上就得摆上三个液晶屏+笔记本显示器一共四个屏幕，有点过于嚣张了。&lt;/p&gt;&#xD;
&lt;p&gt;今天研究了一下有一种办法可以减少一个显示器的办法。那就是两台机器共享一个屏幕。&lt;/p&gt;&#xD;
&lt;p&gt;现在的液晶屏都支持两种数据线接口，一种是传统的VGA，另一种是DMI接口（比较喜欢这种接口）。&lt;/p&gt;&#xD;
&lt;p&gt;硬件环境是这样子的：&lt;/p&gt;&#xD;
&lt;p&gt;1、台式机DellOptiplex755 + DMI显卡+分显器（不知道是不是这个名称，就是一个转接口，一端从显卡接出来，另一端有两个DMI接口）就是为了可以支持双显而设置的。&lt;/p&gt;&#xD;
&lt;p&gt;2、笔记本Dell420&lt;/p&gt;&#xD;
&lt;p&gt;3、显示器DEll 19寸两台。&lt;/p&gt;&#xD;
&lt;p&gt;4、DMI数据线两条，VGA数据线一条。&lt;/p&gt;&#xD;
&lt;p&gt;&lt;strong&gt;操作方法：&lt;/strong&gt;&lt;/p&gt;&#xD;
&lt;p&gt;先成功连接两台显示器到台式机主机上，这个原来就接好了。这个过程使用了两条DMI数据线。&lt;/p&gt;&#xD;
&lt;p&gt;把另一条VGA数据接到共享的那台显示器上，另一头接到笔记本上。&lt;/p&gt;&#xD;
&lt;p&gt;&lt;strong&gt;使用方法：&lt;/strong&gt;&lt;/p&gt;&#xD;
&lt;p&gt;我的两台操作系统都是WIN7所以操作很简单，先到已经使用双显的机子上按win+P切换到&amp;#8220;仅投影仪&amp;#8221;或者&amp;#8220;仅计算机&amp;#8221;（主要是看是不是把共享的那个显示器给关掉了。&lt;/p&gt;&#xD;
&lt;p&gt;然后在另一台主机上按win+P进行扩展显示，就可以达到双显的效果了。&lt;/p&gt;&#xD;
&lt;p&gt;&lt;strong&gt;原理：&lt;/strong&gt;&lt;/p&gt;&#xD;
&lt;p&gt;一个显示器同一时刻只能接收一个信号，如果两个同时有信号的情况下应该谁先控制谁优先。所以要切换的时候需要先把优先使用的主机切换到断开状态，另一台主机才有办法连接上去。&lt;/p&gt;&#xD;
&lt;p&gt;平时我在使用一台主机的时候另一个可能会比较少，所以通过这种共享的方式可以减少我桌面上的一台显示器，感觉宽松多了。现在习惯了使用双显，到哪里都想要双屏了。唉，习惯就是这么被&amp;#8220;培养&amp;#8221;出来的。&lt;/p&gt;&#xD;
&lt;p&gt;如果有办法把鼠标与键盘也共享的话那就太好了。现在我桌面上有两个鼠标，一个键盘，另一个键盘实在没有地方放了，只能用笔记本的键盘了。&lt;/p&gt;&lt;img src="http://www.cnblogs.com/liubiqu/aggbug/1821163.html?type=1" width="1" height="1" alt=""/&gt;&lt;p&gt;&lt;a href="http://www.cnblogs.com/liubiqu/archive/2010/09/08/1821163.html" target="_blank"&gt;本文链接&lt;/a&gt;&lt;/p&gt;</content></entry><entry><id>http://www.cnblogs.com/liubiqu/archive/2010/08/04/1792248.html</id><title type="text">存储过程与业务类实现业务的差异比较</title><summary type="text">以下比较不太全面，纯粹是个人的理解。可能是针对前一篇文章的补充与说明1、批量数据的处理比较业务逻辑：单位A部门划转到B部门，业务规则是把A部门的100人的关联单位改为B部门，同时在人员岗位变化子表里增加一条变动记录。业务实现：1）存储过程实现（SP实现)（两个SQL语句）insert into 岗位变化子表（变化前部门、变化前岗位、变化后部门、变化后岗位、生效时间、操作人、操作时间） select...</summary><published>2010-08-04T07:49:00Z</published><updated>2010-08-04T07:49:00Z</updated><author><name>小草</name><uri>http://www.cnblogs.com/liubiqu/</uri></author><link rel="alternate" href="http://www.cnblogs.com/liubiqu/archive/2010/08/04/1792248.html"/><link rel="alternate" type="text/html" href="http://www.cnblogs.com/liubiqu/archive/2010/08/04/1792248.html"/><content type="html">&lt;p&gt;以下比较不太全面，纯粹是个人的理解。可能是针对前一篇文章的补充与说明&lt;/p&gt;&#xD;
&lt;p&gt;&lt;strong&gt;1、批量数据的处理比较&lt;/strong&gt;&lt;/p&gt;&#xD;
&lt;p&gt;&lt;strong&gt;业务逻辑：&lt;/strong&gt;单位A部门划转到B部门，业务规则是把A部门的100人的关联单位改为B部门，同时在人员岗位变化子表里增加一条变动记录。&lt;/p&gt;&#xD;
&lt;p&gt;&lt;strong&gt;业务实现：&lt;/strong&gt;&lt;/p&gt;&#xD;
&lt;p&gt;1）存储过程实现（SP实现)（两个SQL语句）&lt;/p&gt;&#xD;
&lt;p&gt;insert into 岗位变化子表（变化前部门、变化前岗位、变化后部门、变化后岗位、生效时间、操作人、操作时间） select&amp;nbsp;A,岗位,B,岗位,sysdate,当前登录用户,sysdate from 员工表 where 部门ID=A；--完成插入100条子表的数据&lt;/p&gt;&#xD;
&lt;p&gt;update 员工表 set 部门ID=B where 部门ID=A; --更新员工的部门关联&lt;/p&gt;&#xD;
&lt;p&gt;commit; --最后提交，SP本身就开启了事务机制，所以可以放心操作。&lt;/p&gt;&#xD;
&lt;p&gt;2）业务类实现1（符合面向对象的原则）&lt;/p&gt;&#xD;
&lt;p&gt;获得A部门员工对象，一般是100个员工对象的Collection，即生成的SQL语句是把所有的员工表的字段都查询出来，然后循环进行员工对象属性的变更与保存、子对象的创建与保存等业务。&lt;/p&gt;&#xD;
&lt;p&gt;3）业务类实现2（有点不太符合面向对象的原则，但效率肯定比前面一种高）&lt;/p&gt;&#xD;
&lt;p&gt;按SP方式执行SQL语句。当然要注意开启事务处理，否则可能会产生垃圾数据哟。&lt;/p&gt;&#xD;
&lt;p&gt;当然可能还有除了这三种之外的实现方式，但这三种应该是最常见的了。其它的内容这里就不展开说了。希望非专业人士可以看明白。专业人士可以自行计算一下数据库连接的次数及需要传输的数据量。&lt;/p&gt;&#xD;
&lt;p&gt;&lt;strong&gt;需求变更：&lt;/strong&gt;增加操作IP的记录&lt;/p&gt;&#xD;
&lt;p&gt;所有都要做的事情：增加【岗位变化子表】数据表字段：操作IP&lt;/p&gt;&#xD;
&lt;p&gt;1）SP调整&lt;/p&gt;&#xD;
&lt;p&gt;增加参数IP，修改第一条insert语句即可。&lt;/p&gt;&#xD;
&lt;p&gt;关联修改：调用存储过程方法重新调整。重新编译发布&lt;/p&gt;&#xD;
&lt;p&gt;2）业务实现1&lt;/p&gt;&#xD;
&lt;p&gt;修改岗位变化子表的实体类。（一般是重新生成即可）&lt;/p&gt;&#xD;
&lt;p&gt;修改业务逻辑类&lt;/p&gt;&#xD;
&lt;p&gt;重新编译发布&lt;/p&gt;&#xD;
&lt;p&gt;3）业务实现2&lt;/p&gt;&#xD;
&lt;p&gt;修改岗位变化子表的实体类。（一般是重新生成即可）&lt;/p&gt;&#xD;
&lt;p&gt;修改SQL语句&lt;/p&gt;&#xD;
&lt;p&gt;重新编译发布&lt;/p&gt;&#xD;
&lt;p&gt;&lt;/p&gt;&#xD;
&lt;p&gt;&lt;strong&gt;2、数据统计类&lt;/strong&gt;&lt;/p&gt;&#xD;
&lt;p&gt;&lt;strong&gt;业务逻辑：&lt;/strong&gt;定时（每小时或每天）更新用户排行榜（如积分排行榜），假设用户积分数据8千万条数据。&lt;/p&gt;&#xD;
&lt;p&gt;业务实现：SP的方式&lt;/p&gt;&#xD;
&lt;p&gt;创建一个Job队列执行设定的存储过程，把统计的结果存到积分排行榜的数据表里。&lt;/p&gt;&#xD;
&lt;p&gt;&lt;strong&gt;适应需求变化：&lt;/strong&gt;统计的规则可能经常变化，特别是积分系统的调整也是非常频繁的（可能一周就会有一次，特别是项目上线前期），存储过程可以很快的修改测试与部署。不需要指定专门的时间去停止所有的Web服务器更新应用来满足需求的变化。&lt;/p&gt;&#xD;
&lt;p&gt;先写这些吧，写东西太耗时间了。还是等压力测试的数据出来再做一些分析吧。&lt;/p&gt;&lt;img src="http://www.cnblogs.com/liubiqu/aggbug/1792248.html?type=1" width="1" height="1" alt=""/&gt;&lt;p&gt;&lt;a href="http://www.cnblogs.com/liubiqu/archive/2010/08/04/1792248.html" target="_blank"&gt;本文链接&lt;/a&gt;&lt;/p&gt;</content></entry><entry><id>http://www.cnblogs.com/liubiqu/archive/2010/08/04/1791841.html</id><title type="text">业务逻辑实现方式的讨论：存储过程 good or bad?</title><summary type="text">之前国内外都对存储过程的好与坏进行了激烈的争论，本文将不讨论这部分内容，更重要的强调什么情况下使用存储过程，什么情况下应该封装在业务类中。总体的原则：1、业务逻辑需要进行复杂的判断处理使用业务类实现2、涉及小数据量（数据行在200条以内）处理判断使用业务类实现3、涉及批量数据处理使用存储过程实现（如部门人员批量合并，同时批量增加每个人员的岗位变更信息子表）4、涉及统计分析部分的逻辑通过存储过程来实现5、如果需要对外提供数据层接口的部分通过存储过程实现，不建议直接开放数据表，至少也要以视图的形式开放（这种情况很少，一般是内部系统间才会使用这种接口，建议少用）6、需要进行横向扩展的业务使用业务类实现（如：用户认证表只是纵向扩展，只是记录的增加；企业的数量可能的增长就属于横向扩展或者说模块的数量增长也属于横向扩展，涉及数据表的增加部分）</summary><published>2010-08-04T03:20:00Z</published><updated>2010-08-04T03:20:00Z</updated><author><name>小草</name><uri>http://www.cnblogs.com/liubiqu/</uri></author><link rel="alternate" href="http://www.cnblogs.com/liubiqu/archive/2010/08/04/1791841.html"/><link rel="alternate" type="text/html" href="http://www.cnblogs.com/liubiqu/archive/2010/08/04/1791841.html"/><content type="html">&lt;div style="line-height: 1.5; text-indent: 2em; font-family: 宋体, Verdana, Arial, Helvetica, sans-serif"&gt;之前国内外都对存储过程的好与坏进行了激烈的争论，以下是一些调查与讨论的链接，有兴趣可以去了解一下：&lt;/div&gt;&#xD;
&lt;div style="line-height: 1.5; text-indent: 2em; font-family: 宋体, Verdana, Arial, Helvetica, sans-serif"&gt;&lt;a href="http://weblogs.asp.net/fbouma/archive/2003/11/18/38178.aspx"&gt;http://weblogs.asp.net/fbouma/archive/2003/11/18/38178.aspx&lt;/a&gt;&lt;/div&gt;&#xD;
&lt;div style="line-height: 1.5; text-indent: 2em; font-family: 宋体, Verdana, Arial, Helvetica, sans-serif"&gt;&lt;a href="http://www.oreillynet.com/databases/blog/2007/03/_so_are_database_stored_proced.html"&gt;http://www.oreillynet.com/databases/blog/2007/03/_so_are_database_stored_proced.html&lt;/a&gt;&lt;/div&gt;&#xD;
&lt;div style="line-height: 1.5; text-indent: 2em; font-family: 宋体, Verdana, Arial, Helvetica, sans-serif"&gt;&lt;a href="http://andrewonedegree.wordpress.com/2010/03/08/are-stored-procedures-good-or-bad-and-when-to-use-them/"&gt;http://andrewonedegree.wordpress.com/2010/03/08/are-stored-procedures-good-or-bad-and-when-to-use-them/&lt;/a&gt;&amp;nbsp;（推荐）&lt;/div&gt;&#xD;
&lt;div style="line-height: 1.5; text-indent: 2em; font-family: 宋体, Verdana, Arial, Helvetica, sans-serif"&gt;&lt;a href="http://www.cnblogs.com/cxd4321/archive/2008/03/21/1115881.html"&gt;http://www.cnblogs.com/cxd4321/archive/2008/03/21/1115881.html&lt;/a&gt;&amp;nbsp;&lt;/div&gt;&#xD;
&lt;p&gt;&lt;/p&gt;&#xD;
&lt;div style="line-height: 1.5; text-indent: 2em; font-family: 宋体, Verdana, Arial, Helvetica, sans-serif"&gt;本文将不讨论这部分内容，更重要的强调什么情况下使用存储过程，什么情况下应该封装在业务类中。&lt;/div&gt;&#xD;
&lt;div style="line-height: 1.5; text-indent: 2em; font-family: 宋体, Verdana, Arial, Helvetica, sans-serif"&gt;总体的原则：&lt;/div&gt;&#xD;
&lt;div style="line-height: 1.5; text-indent: 2em; font-family: 宋体, Verdana, Arial, Helvetica, sans-serif"&gt;1、业务逻辑需要进行复杂的判断处理使用业务类实现&lt;/div&gt;&#xD;
&lt;div style="line-height: 1.5; text-indent: 2em; font-family: 宋体, Verdana, Arial, Helvetica, sans-serif"&gt;2、涉及小数据量（数据行在200条以内）处理判断使用业务类实现&lt;/div&gt;&#xD;
&lt;div style="line-height: 1.5; text-indent: 2em; font-family: 宋体, Verdana, Arial, Helvetica, sans-serif"&gt;3、涉及批量数据处理使用存储过程实现（如部门人员批量合并，同时批量增加每个人员的岗位变更信息子表）&lt;/div&gt;&#xD;
&lt;div style="line-height: 1.5; text-indent: 2em; font-family: 宋体, Verdana, Arial, Helvetica, sans-serif"&gt;4、涉及统计分析部分的逻辑通过存储过程来实现&lt;/div&gt;&#xD;
&lt;div style="line-height: 1.5; text-indent: 2em; font-family: 宋体, Verdana, Arial, Helvetica, sans-serif"&gt;5、如果需要对外提供数据层接口的部分通过存储过程实现，不建议直接开放数据表，至少也要以视图的形式开放（这种情况很少，一般是内部系统间才会使用这种接口，建议少用）&lt;/div&gt;&#xD;
&lt;div style="line-height: 1.5; text-indent: 2em; font-family: 宋体, Verdana, Arial, Helvetica, sans-serif"&gt;6、需要进行横向扩展的业务使用业务类实现（如：用户认证表只是纵向扩展，只是记录的增加；企业的数量可能的增长就属于横向扩展或者说模块的数量增长也属于横向扩展，涉及数据表的增加部分）&lt;/div&gt;&#xD;
&lt;div style="line-height: 1.5; text-indent: 2em; font-family: 宋体, Verdana, Arial, Helvetica, sans-serif"&gt;&lt;span style="widows: 2; text-transform: none; text-indent: 0px; border-collapse: separate; font: medium Simsun; white-space: normal; orphans: 2; letter-spacing: normal; color: rgb(0,0,0); word-spacing: 0px; -webkit-border-horizontal-spacing: 0px; -webkit-border-vertical-spacing: 0px; -webkit-text-decorations-in-effect: none; -webkit-text-size-adjust: auto; -webkit-text-stroke-width: 0px" &gt;&lt;span style="line-height: 21px; font-family: 宋体, Verdana, Arial, Helvetica, sans-serif; font-size: 14px" &gt;&amp;nbsp; &#xD;
&lt;div style="line-height: 1.5; text-indent: 2em; font-family: 宋体, Verdana, Arial, Helvetica, sans-serif"&gt;当然在大多数情况下，需要具体情况具体分析，以下只是针对我目前项目情况的分析：&lt;/div&gt;&#xD;
&lt;div style="line-height: 1.5; text-indent: 2em; font-family: 宋体, Verdana, Arial, Helvetica, sans-serif"&gt;1、只支持Oracle数据库。即Oracle10g及以上版本的数据库。因为是做SAAS服务，所以客户不需要关心数据库，为此产品没有适应多种数据库环境的需求。&lt;/div&gt;&#xD;
&lt;div style="line-height: 1.5; text-indent: 2em; font-family: 宋体, Verdana, Arial, Helvetica, sans-serif"&gt;2、模块低耦合。如用户认证、注册、具体业务逻辑模块应用等进行物理上的分离，提供的数据库存储及服务都分布在不同的数据库服务器或者实例上。&lt;/div&gt;&#xD;
&lt;div style="line-height: 1.5; text-indent: 2em; font-family: 宋体, Verdana, Arial, Helvetica, sans-serif"&gt;3、对可扩展性要求比较高，要求可进行多种方式的扩展（如部署方面可以通过横向增加服务器的方式解决高并发的问题，业务方面要求可以适应不断增加的功能模块，以适应企业管理的需要）。&lt;/div&gt;&#xD;
&lt;div style="line-height: 1.5; text-indent: 2em; font-family: 宋体, Verdana, Arial, Helvetica, sans-serif"&gt;4、对可靠性要求比较高，要求可提供7*24不间断服务。&lt;/div&gt;&#xD;
&lt;div style="line-height: 1.5; text-indent: 2em; font-family: 宋体, Verdana, Arial, Helvetica, sans-serif"&gt;&amp;nbsp;&lt;/div&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&#xD;
&lt;div style="line-height: 1.5; text-indent: 2em; font-family: 宋体, Verdana, Arial, Helvetica, sans-serif"&gt;&lt;span style="color: red"&gt;&lt;strong&gt;总结：&lt;/strong&gt;&lt;/span&gt;&lt;/div&gt;&#xD;
&lt;div style="line-height: 1.5; text-indent: 2em; font-family: 宋体, Verdana, Arial, Helvetica, sans-serif"&gt;通过Web服务器部署业务逻辑层的执行在横向扩展性能方面存在很大的优势。但在某些方面还是存在一些问题，同时也要考验开发人员的水平与代码的质量，对需求变更的适应性及响应的及时性等等方面。Oracle本身提供了一些数据库负载的解决方案，虽然我不是OracleDBA，但Oracle在数据库方面的成就还是非凡的。据我所了解的情况，发现数据库存在瓶颈的时候，除了优化一些SQL语句的执行效率之外，最先要做的就是数据库的读写分离，大大减少对IO资源的压力。在其它方面应该还有一些解决方案，至少之前在电信、电力、税务等大型应用下Oracle数据库本身并没有存在很大的问题（可能是DBA都解决掉了吧）。而在我的经验中大部分出问题的反而是程序本身，一方面是比较难快速的适应需求变更，另一方面是比较难定位问题。后者很大的原因是没有做好单元测试，造成问题定位困难，造成测试跟踪起来太麻烦。&lt;/div&gt;&lt;img src="http://www.cnblogs.com/liubiqu/aggbug/1791841.html?type=1" width="1" height="1" alt=""/&gt;&lt;p&gt;&lt;a href="http://www.cnblogs.com/liubiqu/archive/2010/08/04/1791841.html" target="_blank"&gt;本文链接&lt;/a&gt;&lt;/p&gt;</content></entry><entry><id>http://www.cnblogs.com/liubiqu/archive/2010/06/02/1750362.html</id><title type="text">浅析SAAS数据模型设计（Oracle）</title><summary type="text">目前SAAS平台对于大家来说并不陌生，市场上真正属于SAAS应用的并不是特别多，还有很大一部分是ASP的模式在运行，不管对于公司还是技术部门都是很大的挑战。去年在做elearning项目的时候其实也就是一个ASP的模式扩展，ASP模式本身就会存在比较多的问题，虽然与传统的项目型有一定的区别，但从技术角度来看，差别不太大。 最近要弄一个SAAS平台的东西，所以恶补了一下相关的知识，在这里记录一下我的实践与总结。由于还没有最终验证也不太清楚效果如何。供大家讨论，希望可以给我一些意见。 </summary><published>2010-06-02T15:02:00Z</published><updated>2010-06-02T15:02:00Z</updated><author><name>小草</name><uri>http://www.cnblogs.com/liubiqu/</uri></author><link rel="alternate" href="http://www.cnblogs.com/liubiqu/archive/2010/06/02/1750362.html"/><link rel="alternate" type="text/html" href="http://www.cnblogs.com/liubiqu/archive/2010/06/02/1750362.html"/><content type="html">&lt;p&gt;&lt;span style="font-size: 10pt"&gt;&lt;span style="font-family: 宋体"&gt;目前&lt;/span&gt;SAAS&lt;span style="font-family: 宋体"&gt;平台对于大家来说并不陌生，市场上真正属于&lt;/span&gt;SAAS&lt;span style="font-family: 宋体"&gt;应用的并不是特别多，还有很大一部分是&lt;/span&gt;ASP&lt;span style="font-family: 宋体"&gt;的模式在运行，不管对于公司还是技术部门都是很大的挑战。去年在做&lt;/span&gt;elearning&lt;span style="font-family: 宋体"&gt;项目的时候其实也就是一个&lt;/span&gt;ASP&lt;span style="font-family: 宋体"&gt;的模式扩展，&lt;/span&gt;ASP&lt;span style="font-family: 宋体"&gt;模式本身就会存在比较多的问题，虽然与传统的项目型有一定的区别，但从技术角度来看，差别不太大。 &lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&#xD;
&lt;p&gt;&lt;span style="font-size: 10pt"&gt;&lt;span style="font-family: 宋体"&gt;最近要弄一个&lt;/span&gt;SAAS&lt;span style="font-family: 宋体"&gt;平台的东西，所以恶补了一下相关的知识，在这里记录一下我的实践与总结。由于还没有最终验证也不太清楚效果如何。供大家讨论，希望可以给我一些意见。 &lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&#xD;
&lt;p&gt;&lt;span style="font-size: 10pt"&gt;&lt;span style="font-family: 宋体"&gt;使用的数据库&lt;/span&gt;Oracle10g&lt;span style="font-family: 宋体"&gt;，这篇只是从数据模型设计的角度来分析，使用的模式是：共享&lt;/span&gt;database&lt;span style="font-family: 宋体"&gt;独立&lt;/span&gt;Schema&lt;span style="font-family: 宋体"&gt;。 &lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&#xD;
&lt;p&gt;&lt;span style="color: #0070c0; font-size: 10pt"&gt;&lt;strong&gt;Oracle&lt;span style="font-family: 宋体"&gt;中的实现方式：&lt;/span&gt;&lt;/strong&gt; &lt;/span&gt;&lt;/p&gt;&#xD;
&lt;p&gt;&lt;span style="font-size: 10pt"&gt;1&lt;span style="font-family: 宋体"&gt;、共享一个数据库实例，免费的使用&lt;/span&gt;Tenant_Free&lt;span style="font-family: 宋体"&gt;实例，收费的使用&lt;/span&gt;Tenant_VIP&lt;span style="font-family: 宋体"&gt;实例，平台的数据使用&lt;/span&gt;Tenant_Platform&lt;span style="font-family: 宋体"&gt;实例。 &lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&#xD;
&lt;p&gt;&lt;span style="font-size: 10pt"&gt;2&lt;span style="font-family: 宋体"&gt;、独立&lt;/span&gt;Schema&lt;span style="font-family: 宋体"&gt;，通过建立每个&lt;/span&gt;Tenant&lt;span style="font-family: 宋体"&gt;的数据库用户来实现，每个用户使用的数据表根据用户导入的数据进行初始化。配置数据自动生成的方式。通过测试一个实例生成几万个数据库用户是很正常的，如果按照一台普通的服务器可以支撑&lt;/span&gt;1&lt;span style="font-family: 宋体"&gt;万个&lt;/span&gt;Tenant&lt;span style="font-family: 宋体"&gt;的话，那发展到&lt;/span&gt;10&lt;span style="font-family: 宋体"&gt;万用户可能只需要&lt;/span&gt;10&lt;span style="font-family: 宋体"&gt;台服务器的规模，是我可以接受的范围。 &lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&#xD;
&lt;p&gt;&lt;span style="font-size: 10pt"&gt;3&lt;span style="font-family: 宋体"&gt;、原先考虑让每个&lt;/span&gt;Tenant&lt;span style="font-family: 宋体"&gt;分配一个表空间，然后定义数据文件的大小来实现对每个&lt;/span&gt;Tenant&lt;span style="font-family: 宋体"&gt;数据空间的限制，但经过测试发现&lt;/span&gt;Oracle&lt;span style="font-family: 宋体"&gt;中添加表空间是有限个数的，我测试的时候加到&lt;/span&gt;200&lt;span style="font-family: 宋体"&gt;个左右就报错，提示超过表空间的最大数量。看来这种方法行不能。 &lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&#xD;
&lt;p&gt;&lt;img alt="" src="http://images.cnblogs.com/cnblogs_com/liubiqu/060210_1501_SAASOr1.png" /&gt;&lt;span style="font-family: 宋体; font-size: 12pt"&gt; &lt;/span&gt;&lt;/p&gt;&#xD;
&lt;p&gt;&lt;span style="font-size: 10pt"&gt;&lt;span style="font-family: 宋体"&gt;如上图所示，所有的&lt;/span&gt;Tenant User&lt;span style="font-family: 宋体"&gt;都在用户管理库中进行管理，然后数据访问控制器通过&lt;/span&gt;Tenant User&lt;span style="font-family: 宋体"&gt;的信息自动选择&lt;/span&gt;Tenant&lt;span style="font-family: 宋体"&gt;对应的数据结构。可能我觉得这种模式是&lt;/span&gt;MVC&lt;span style="font-family: 宋体"&gt;的改进版本，即&lt;/span&gt;SAAS&lt;span style="font-family: 宋体"&gt;平台下要使用&lt;/span&gt;MVCD&lt;span style="font-family: 宋体"&gt;的模式（&lt;/span&gt;Model-View-Controller-DataAccess&lt;span style="font-family: 宋体"&gt;），数据管理层将模型层与控制层对数据管理方面的内容独立出来，负责数据库结构的管理、数据存取等功能。。 &lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&#xD;
&lt;p&gt;&lt;/p&gt;&#xD;
&lt;p&gt;&lt;span style="font-family: 宋体; color: #0070c0; font-size: 10pt"&gt;&lt;strong&gt;选择的理由：&lt;/strong&gt; &lt;/span&gt;&lt;/p&gt;&#xD;
&lt;p&gt;&lt;span style="font-size: 10pt"&gt;1&lt;span style="font-family: 宋体"&gt;、在&lt;/span&gt;oracle&lt;span style="font-family: 宋体"&gt;里要使用独立的&lt;/span&gt;database&lt;span style="font-family: 宋体"&gt;对于服务器的内存要求实在太高了，一个实例分配的资源如果是&lt;/span&gt;200M&lt;span style="font-family: 宋体"&gt;的话，&lt;/span&gt;4G&lt;span style="font-family: 宋体"&gt;的服务器只能支持&lt;/span&gt;20&lt;span style="font-family: 宋体"&gt;个租户，这个成本我想没有什么人可以承受，所以第一种最简单的方式我不采用。 &lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&#xD;
&lt;p&gt;&lt;span style="font-size: 10pt"&gt;2&lt;span style="font-family: 宋体"&gt;、选择独立&lt;/span&gt;schema&lt;span style="font-family: 宋体"&gt;是非常重要的，对于程序与性能都会有很大的提升，而且业务要求所有企业相关的数据表字段都允许&lt;/span&gt;Tenant&lt;span style="font-family: 宋体"&gt;用户自定义，所以我觉得是必要条件，所以只能选择第二种模式。如果使用预留字段或者通过字段扩展表来存储存在比较多的问题，比如检索速度、字段的限制、数据冗余等缺点。而且对于用户来说不太直观。 &lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&#xD;
&lt;p&gt;&lt;span style="font-size: 10pt"&gt;3&lt;span style="font-family: 宋体"&gt;、从维护管理的角度考虑，备份的时候可以对每个数据库用户的数据进行单独的备份，有利于对无效用户的数据删除与恢复的操作。同时也保证了用户数据的安全性。 &lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&#xD;
&lt;p&gt;&lt;/p&gt;&#xD;
&lt;p&gt;&lt;span style="color: #548dd4; font-size: 10pt"&gt;&lt;strong&gt;&lt;span style="font-family: 宋体"&gt;对&lt;/span&gt;SAAS&lt;span style="font-family: 宋体"&gt;程序的要求：&lt;/span&gt;&lt;/strong&gt; &lt;/span&gt;&lt;/p&gt;&#xD;
&lt;p&gt;&lt;span style="font-size: 10pt"&gt;1&lt;span style="font-family: 宋体"&gt;、要求可以通过配置自动实现&lt;/span&gt;Tenant Schema&lt;span style="font-family: 宋体"&gt;中数据的&lt;/span&gt;CRUD&lt;span style="font-family: 宋体"&gt;操作。 &lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&#xD;
&lt;p&gt;&lt;span style="font-size: 10pt"&gt;2&lt;span style="font-family: 宋体"&gt;、数据报表及相关的查询都要允许自定义，需要提供相关的功能。 &lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&#xD;
&lt;p&gt;&lt;span style="font-size: 10pt"&gt;3&lt;span style="font-family: 宋体"&gt;、&lt;/span&gt;API&lt;span style="font-family: 宋体"&gt;接口服务需要提供配置功能。 &lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;img src="http://www.cnblogs.com/liubiqu/aggbug/1750362.html?type=1" width="1" height="1" alt=""/&gt;&lt;p&gt;&lt;a href="http://www.cnblogs.com/liubiqu/archive/2010/06/02/1750362.html" target="_blank"&gt;本文链接&lt;/a&gt;&lt;/p&gt;</content></entry></feed>
