<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>结网 &#187; iPhone</title>
	<atom:link href="http://blog.liuhongwei.cn/tag/iphone/feed/" rel="self" type="application/rss+xml" />
	<link>http://blog.liuhongwei.cn</link>
	<description>Agile, Startup, 产品管理, Google开发, iPhone开发</description>
	<lastBuildDate>Fri, 30 Jul 2010 10:31:08 +0000</lastBuildDate>
	<generator>http://wordpress.org/?v=2.9.2</generator>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
			<item>
		<title>In App Purchase无敌攻略</title>
		<link>http://blog.liuhongwei.cn/iphone/in-app-purchase_tips/</link>
		<comments>http://blog.liuhongwei.cn/iphone/in-app-purchase_tips/#comments</comments>
		<pubDate>Fri, 30 Jul 2010 10:31:08 +0000</pubDate>
		<dc:creator>Harry</dc:creator>
				<category><![CDATA[iPhone]]></category>
		<category><![CDATA[unveil]]></category>

		<guid isPermaLink="false">http://blog.liuhongwei.cn/?p=237</guid>
		<description><![CDATA[前些天想把内容拆开买，apple却不允许了，而是推荐使用In App Purchase把内容组合到一起。
找到一个超详细的In App Purchase攻略
http://troybrant.net/blog/2010/01/in-app-purchases-a-full-walkthrough/
苹果官方的IAP编程指南也可以参考。
做了个例子程序，可以明确的是：
app必须使用非通配符的ID。本来有几个程序是使用通配符的App ID，试了一下，不是返回invalid purchase，就是返回SKError:  Cannot connect to iTunes Stor。申请了一个新的唯一App ID，然后用于测试app，再申请一个IAP的product id，一切正常了。
测试中还看到device console中的一条错误信息，iTouch中的浏览器直接访问没问题，原因不明，网上也查不到，设置了一个代理服务器就不显示该错误信息了。后来又测试了一下，发现该消息不准确，取消代理服务器后，使用正确app id的app发送正确product id，一切正常。
Fri Jul 30 11:18:49 iPod-touch /System/Library/PrivateFrameworks/iTunesStore.framework/Support/itunesstored[4180] &#60;Error&#62;: URL: http://sandbox.itunes.apple.com/bag.xml?ix=2&#62; Heuristics Failed, NOT PIPELINING
某product买了以后再买non-consumable的product，iTune会自动弹出消息，告知用户已经买过了但没下载，可以点击确定下载，点击确定后，iTune会给程序一个transaction complete的消息，然后界面会自动弹出消息，购买成功。所谓的下载应该指的是再次返回一个transaction complete消息，让app有机会处理购买成功。可见

iTunes会记录每个用户购买了哪些IAP product
购买过还可以再次购买non-consumable的product，但iTunes不会重复扣钱，却仍会返回成功消息。

例子和教程上，正常的IAP流程是，发送product id列表，接受所有有效product列表；然后，用户购买某个product。但是，经过测试，用户可以省略发送接收有效product列表这个步骤，直接购买某个product，当然这样会有些风险，比如product被苹果移除了，但是正常情况下问题不大。
]]></description>
			<content:encoded><![CDATA[<p>前些天想把内容拆开买，apple却不允许了，而是推荐使用In App Purchase把内容组合到一起。</p>
<p>找到一个<strong>超详细的In App Purchase攻略</strong></p>
<p><a href="http://troybrant.net/blog/2010/01/in-app-purchases-a-full-walkthrough/">http://troybrant.net/blog/2010/01/in-app-purchases-a-full-walkthrough/</a></p>
<p>苹果官方的<a href="http://developer.apple.com/iphone/library/documentation/NetworkingInternet/Conceptual/StoreKitGuide/Introduction/Introduction.html">IAP编程指南</a>也可以参考。</p>
<p><a href="http://developer.apple.com/iphone/library/documentation/NetworkingInternet/Conceptual/StoreKitGuide/Introduction/Introduction.html"></a>做了个例子程序，可以明确的是：</p>
<p><strong>app必须使用非通配符的ID</strong>。本来有几个程序是使用通配符的App ID，试了一下，不是返回invalid purchase，就是返回SKError:  Cannot connect to iTunes Stor。申请了一个新的唯一App ID，然后用于测试app，再申请一个IAP的product id，一切正常了。</p>
<p>测试中还看到device <strong>console中的一条错误信息</strong>，iTouch中的浏览器直接访问没问题，原因不明，网上也查不到，设置了一个代理服务器就不显示该错误信息了。后来又测试了一下，发现该消息不准确，取消代理服务器后，使用正确app id的app发送正确product id，一切正常。</p>
<blockquote><p>Fri Jul 30 11:18:49 iPod-touch /System/Library/PrivateFrameworks/iTunesStore.framework/Support/itunesstored[4180] &lt;Error&gt;: URL: http://sandbox.itunes.apple.com/bag.xml?ix=2&gt; Heuristics Failed, NOT PIPELINING</p></blockquote>
<p><strong>某product买了以后再买non-consumable的product</strong>，iTune会自动弹出消息，告知用户已经买过了但没下载，可以点击确定下载，点击确定后，iTune会给程序一个transaction complete的消息，然后界面会自动弹出消息，购买成功。所谓的下载应该指的是再次返回一个transaction complete消息，让app有机会处理购买成功。可见</p>
<ul>
<li>iTunes会记录每个用户购买了哪些IAP product</li>
<li>购买过还可以再次购买non-consumable的product，但iTunes不会重复扣钱，却仍会返回成功消息。</li>
</ul>
<p>例子和教程上，<strong>正常的IAP流程</strong>是，发送product id列表，接受所有有效product列表；然后，用户购买某个product。但是，经过测试，用户可以省略发送接收有效product列表这个步骤，直接购买某个product，当然这样会有些风险，比如product被苹果移除了，但是正常情况下问题不大。</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.liuhongwei.cn/iphone/in-app-purchase_tips/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>In-App Purchase 培训</title>
		<link>http://blog.liuhongwei.cn/iphone/in-app-purchase/</link>
		<comments>http://blog.liuhongwei.cn/iphone/in-app-purchase/#comments</comments>
		<pubDate>Thu, 12 Nov 2009 13:40:49 +0000</pubDate>
		<dc:creator>Harry</dc:creator>
				<category><![CDATA[iPhone]]></category>
		<category><![CDATA[教学]]></category>

		<guid isPermaLink="false">http://blog.liuhongwei.cn/?p=138</guid>
		<description><![CDATA[Consumable苹果新加坡的标志居然是红苹果 http://twitpic.com/p7v5b
苹果允许在免费应用中提供购买（In-App Purchase）之后，销售模式有了全新的改变，用户们终于可以先试后买了。以后那些几个漂亮图+烂内容，用户卖完大呼上当的程序恐怕越来越没有市场了。
正好apple组织了一个In-App Purchase的培训，来瞧瞧，顺便跟开发者们交流一下。迟到了几分钟，百人小会议厅已经坐满了，茶歇的时候才发现，居然有一半洋人，很多人一身休闲打扮，穿着短裤，踏着拖鞋就来了。培训先介绍In-App Purchase，然后演示了一个具体的例子。只有一个感觉，非常的复杂。
In-App Purchase的3种类型

Consumable：一次性购买，最简单的类型，不用保存历史记录。
Nonconsumable：每个产品，用户只买一次，此后就可以在自己的所有设备上看到该产品。
Subscriptions：订阅模式允许多次购买末一个产品，但是购买后，用户可以在自己的所有设备上看到该产品。

一个典型的In-App Purchase需要4大部分的协作：your Server，App，App Store，iTune。
Your Server主要是保存交易代号，传递购买的内容；当然如果购买的内容比较简单，Server也是可以省略的。
App中内置需要购买的产品

用自己的服务器来提供需要购买的产品

后面还有一些话题，获取产品信息，在程序中添加购买的过程，向App Store验证交易收据，在iTune Connect中的配置，使用测试帐号来测试程序的购买过程等等，都很实用。
]]></description>
			<content:encoded><![CDATA[<p>Consumable苹果新加坡的标志居然是红苹果 <a href="http://twitpic.com/p7v5b">http://twitpic.com/p7v5b</a></p>
<p>苹果允许在免费应用中提供购买（<a href="http://developer.apple.com/iphone/library/documentation/NetworkingInternet/Conceptual/StoreKitGuide/Introduction/Introduction.html">In-App Purchase</a>）之后，销售模式有了全新的改变，用户们终于可以先试后买了。以后那些几个漂亮图+烂内容，用户卖完大呼上当的程序恐怕越来越没有市场了。</p>
<p>正好apple组织了一个In-App Purchase的培训，来瞧瞧，顺便跟开发者们交流一下。迟到了几分钟，百人小会议厅已经坐满了，茶歇的时候才发现，居然有一半洋人，很多人一身休闲打扮，穿着短裤，踏着拖鞋就来了。培训先介绍In-App Purchase，然后演示了一个具体的例子。只有一个感觉，非常的复杂。</p>
<p>In-App Purchase的3种类型</p>
<ul>
<li>Consumable：一次性购买，最简单的类型，不用保存历史记录。</li>
<li>Nonconsumable：每个产品，用户只买一次，此后就可以在自己的所有设备上看到该产品。</li>
<li>Subscriptions：订阅模式允许多次购买末一个产品，但是购买后，用户可以在自己的所有设备上看到该产品。</li>
</ul>
<p>一个典型的In-App Purchase需要4大部分的协作：your Server，App，App Store，iTune。</p>
<p>Your Server主要是保存交易代号，传递购买的内容；当然如果购买的内容比较简单，Server也是可以省略的。</p>
<p>App中内置需要购买的产品</p>
<p><img class="alignnone size-full wp-image-139" title="built_in_store_diagram" src="http://blog.liuhongwei.cn/wp-content/uploads/2009/11/built_in_store_diagram.jpg" alt="built_in_store_diagram" width="373" height="496" /></p>
<p>用自己的服务器来提供需要购买的产品</p>
<p><img class="alignnone size-full wp-image-140" title="store_transactions_with_server" src="http://blog.liuhongwei.cn/wp-content/uploads/2009/11/store_transactions_with_server.jpg" alt="store_transactions_with_server" width="564" height="757" /></p>
<p>后面还有一些话题，获取产品信息，在程序中添加购买的过程，向App Store验证交易收据，在iTune Connect中的配置，使用测试帐号来测试程序的购买过程等等，都很实用。</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.liuhongwei.cn/iphone/in-app-purchase/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>成功杀入分类Top25，透视业余创业策略</title>
		<link>http://blog.liuhongwei.cn/iphone/iphone-1st-month-parttime-startup/</link>
		<comments>http://blog.liuhongwei.cn/iphone/iphone-1st-month-parttime-startup/#comments</comments>
		<pubDate>Sat, 17 Oct 2009 03:11:17 +0000</pubDate>
		<dc:creator>Harry</dc:creator>
				<category><![CDATA[iPhone]]></category>
		<category><![CDATA[Startup]]></category>
		<category><![CDATA[推荐]]></category>

		<guid isPermaLink="false">http://blog.liuhongwei.cn/?p=131</guid>
		<description><![CDATA[开发iPhone应用已有月余，今天早晨发现，一个程序终于杀入了日本app store的分类Top 25了。昨天还没进前30的时候，销量就已经翻倍了，今天的销量想必会有惊喜。这个程序开发只用了2天，看来成功与否跟花的时间多少并非成正比，对用户需求的把握才是最重要的。
这个趋势图是用unfish开发的AppStoreReporter弄出来的，可以导入和保存所有历史销量，然后图表显示，非常实用，强烈推荐。
这一个月的销量节节攀升，说明iPhone开发还是有利可图的，当然策略要对头，我还是会坚持每个开发不超过一周的原则，因为时间一长，要么坚持不下，要么销量不好，白白浪费时间。
业余创业一般分为两个阶段：第一阶段起步，目标就是活着，收入稳步上升说明创业思路对头，另外预期也会随着逐渐上升，在心里上可以避免大起大落；另外，由于是业余时间搞的，每个应用程序的开发周期要严格控制在很短的时间，如果效果不好，坚决砍掉。
当收入稳定在某个级别，足以让你衣食无忧的过几年的时候，就可以考虑放手一搏了，这时候在市场上也有经验了，对客户的需求有了深刻的了解，尝试做一些大型的应用，也可以对已有的销量较好的应用进行重点升级。
]]></description>
			<content:encoded><![CDATA[<p><img class="alignleft size-full wp-image-133" title="iphone-app-one-month-sales" src="http://blog.liuhongwei.cn/wp-content/uploads/2009/10/iphone-app-one-month-sales.jpg" alt="iphone-app-one-month-sales" width="420" height="287" />开发iPhone应用已有月余，今天早晨发现，一个程序终于杀入了日本app store的分类Top 25了。昨天还没进前30的时候，销量就已经翻倍了，今天的销量想必会有惊喜。这个程序开发只用了2天，看来成功与否跟花的时间多少并非成正比，对用户需求的把握才是最重要的。</p>
<p>这个趋势图是用unfish开发的<a href="http://www.unfish.net/archives/513-20090709.html">AppStoreReporter</a>弄出来的，可以导入和保存所有历史销量，然后图表显示，非常实用，强烈推荐。</p>
<p>这一个月的销量节节攀升，说明iPhone开发还是有利可图的，当然策略要对头，我还是会坚持每个开发不超过一周的原则，因为时间一长，要么坚持不下，要么销量不好，白白浪费时间。</p>
<p><strong>业余创业</strong>一般分为两个阶段：第一阶段起步，目标就是活着，收入稳步上升说明创业思路对头，另外预期也会随着逐渐上升，在心里上可以避免大起大落；另外，由于是业余时间搞的，每个应用程序的开发周期要严格控制在很短的时间，如果效果不好，坚决砍掉。</p>
<p>当收入稳定在某个级别，足以让你衣食无忧的过几年的时候，就可以考虑放手一搏了，这时候在市场上也有经验了，对客户的需求有了深刻的了解，尝试做一些大型的应用，也可以对已有的销量较好的应用进行重点升级。</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.liuhongwei.cn/iphone/iphone-1st-month-parttime-startup/feed/</wfw:commentRss>
		<slash:comments>4</slash:comments>
		</item>
		<item>
		<title>第一个iPhone程序ready for sale了</title>
		<link>http://blog.liuhongwei.cn/iphone/first-iphone-ready-for-sale/</link>
		<comments>http://blog.liuhongwei.cn/iphone/first-iphone-ready-for-sale/#comments</comments>
		<pubDate>Mon, 14 Sep 2009 15:08:31 +0000</pubDate>
		<dc:creator>Harry</dc:creator>
				<category><![CDATA[iPhone]]></category>

		<guid isPermaLink="false">http://blog.liuhongwei.cn/?p=118</guid>
		<description><![CDATA[经过15天的苦苦等待，第一个iPhone程序终于登录app store了，不过现在只是在US的app store中，其他地方的store虽然还看不到，但是查询的时候却可以查到公司名，就是没有app，很奇怪！
]]></description>
			<content:encoded><![CDATA[<p>经过15天的苦苦等待，第一个iPhone程序终于登录app store了，不过现在只是在US的app store中，其他地方的store虽然还看不到，但是查询的时候却可以查到公司名，就是没有app，很奇怪！</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.liuhongwei.cn/iphone/first-iphone-ready-for-sale/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>第一个iPhone程序，提交10天了</title>
		<link>http://blog.liuhongwei.cn/iphone/iphone-app-submit/</link>
		<comments>http://blog.liuhongwei.cn/iphone/iphone-app-submit/#comments</comments>
		<pubDate>Tue, 08 Sep 2009 17:29:52 +0000</pubDate>
		<dc:creator>Harry</dc:creator>
				<category><![CDATA[iPhone]]></category>

		<guid isPermaLink="false">http://blog.liuhongwei.cn/?p=116</guid>
		<description><![CDATA[查了一下状态，还在Review中，平均12天的提交进程，果然名不虚传。提交后发现了一些问题，特别是程序不稳定，使用一段时间就退出。不过也懒得reject Binary了，还得重新排队，也许测试人员那里没问题就进去了，然后再升级吧。9月上半月，争取再提交10个app。
简单列一下提交过程：
第一步交钱，个人开发者，每年99刀，使用非中国地区，省了fax的麻烦，直接在app store就可以使用信用卡付款。不过，过程也是一波三折，发给我确认码之后，居然提示已被锁定，联系客服之后才解决。
第二步登录，进入iPhone Developer Program Portal。依次设定Team，请求Certificate，确认开发用Device，申请App ID，获取Provisioning，生成Distribution。Potal中都有详细的说明和步骤，不难，就是麻烦。
第三步，在iTunes Connect中提交签名过的app，进入漫长的等待review的过程。
]]></description>
			<content:encoded><![CDATA[<p>查了一下状态，还在Review中，平均12天的提交进程，果然名不虚传。提交后发现了一些问题，特别是程序不稳定，使用一段时间就退出。不过也懒得reject Binary了，还得重新排队，也许测试人员那里没问题就进去了，然后再升级吧。9月上半月，争取再提交10个app。</p>
<p><strong>简单列一下提交过程：</strong></p>
<p>第一步交钱，个人开发者，每年99刀，使用非中国地区，省了fax的麻烦，直接在app store就可以使用信用卡付款。不过，过程也是一波三折，发给我确认码之后，居然提示已被锁定，联系客服之后才解决。</p>
<p>第二步登录，进入iPhone Developer Program Portal。依次设定Team，请求Certificate，确认开发用Device，申请App ID，获取Provisioning，生成Distribution。Potal中都有详细的说明和步骤，不难，就是麻烦。</p>
<p>第三步，在iTunes Connect中提交签名过的app，进入漫长的等待review的过程。</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.liuhongwei.cn/iphone/iphone-app-submit/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>进军iPhone进展，准备发布</title>
		<link>http://blog.liuhongwei.cn/iphone/first-iphone-dev-ready/</link>
		<comments>http://blog.liuhongwei.cn/iphone/first-iphone-dev-ready/#comments</comments>
		<pubDate>Mon, 24 Aug 2009 15:16:24 +0000</pubDate>
		<dc:creator>Harry</dc:creator>
				<category><![CDATA[iPhone]]></category>
		<category><![CDATA[live]]></category>

		<guid isPermaLink="false">http://blog.liuhongwei.cn/?p=113</guid>
		<description><![CDATA[进军iPhone开发计划执行顺利，3天过后，程序完成，说明文档，图片也准备好了。只是注册iPhone开发帐号遇到了问题，不小心使用中国的信用卡注册，结果到了最后一页，才说中国没有开通App Store，无法接受信用卡，只能手填一个表格，然后fax给美国，交钱居然还这么麻烦。奇怪，接受个信用卡，跟App Store有什么关系？在线收款自己做不了，可以外包嘛。苹果的设计还真有点问题，居然没有后退按钮，所以无法改其他国家，只能联系他们的support来重置一下。预计明天能搞定，然后就可以提交程序了。
再列几个实用资源
http://code.google.com/p/cookbooksamples/downloads/list 《the iPhone developer&#8217;s cookbook》的源代码。里面最人性化的是有mov格式的视频，这样不用编译执行源代码，直接看看视频就知道是不是自己需要的。
http://www.cocoachina.com/bbs/read.php?tid-568.html G大总结的FAQ，非常实用。
http://thierryxing.javaeye.com/blog/453645 thierryxing翻译的《如何创建你的第一个iPhone程序》，一步一步很详细。
]]></description>
			<content:encoded><![CDATA[<p><a href="http://blog.liuhongwei.cn/iphone/first-iphone-dev/">进军iPhone开发计划</a>执行顺利，3天过后，程序完成，说明文档，图片也准备好了。只是注册iPhone开发帐号遇到了问题，不小心使用中国的信用卡注册，结果到了最后一页，才说中国没有开通App Store，无法接受信用卡，只能手填一个表格，然后fax给美国，交钱居然还这么麻烦。奇怪，接受个信用卡，跟App Store有什么关系？在线收款自己做不了，可以外包嘛。苹果的设计还真有点问题，居然没有后退按钮，所以无法改其他国家，只能联系他们的support来重置一下。预计明天能搞定，然后就可以提交程序了。</p>
<p>再列几个实用资源</p>
<p><a href="http://code.google.com/p/cookbooksamples/downloads/list">http://code.google.com/p/cookbooksamples/downloads/list</a> 《the iPhone developer&#8217;s cookbook》的源代码。里面最人性化的是有mov格式的视频，这样不用编译执行源代码，直接看看视频就知道是不是自己需要的。</p>
<p><a href="http://www.cocoachina.com/bbs/read.php?tid-568.html">http://www.cocoachina.com/bbs/read.php?tid-568.html</a> G大总结的FAQ，非常实用。</p>
<p><a href="http://thierryxing.javaeye.com/blog/453645">http://thierryxing.javaeye.com/blog/453645</a> thierryxing翻译的《如何创建你的第一个iPhone程序》，一步一步很详细。</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.liuhongwei.cn/iphone/first-iphone-dev-ready/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>正式进军iPhone开发，现场直播，Day 1</title>
		<link>http://blog.liuhongwei.cn/iphone/first-iphone-dev/</link>
		<comments>http://blog.liuhongwei.cn/iphone/first-iphone-dev/#comments</comments>
		<pubDate>Fri, 21 Aug 2009 13:43:59 +0000</pubDate>
		<dc:creator>Harry</dc:creator>
				<category><![CDATA[iPhone]]></category>
		<category><![CDATA[脑图]]></category>
		<category><![CDATA[live]]></category>
		<category><![CDATA[教学]]></category>

		<guid isPermaLink="false">http://blog.liuhongwei.cn/?p=105</guid>
		<description><![CDATA[从几个月前开始学Objective C开始，断断续续也写了几个iPhone小程序了。一直想写一个复杂点的游戏，无奈，时间都花在了向往已久的巴厘岛和普吉岛。计划一次次的流产，再不发布，就成纸上谈兵了。这个周末，决定利用3天时间写出一个先，不需要太复杂，毕竟复杂度和赚钱是两回事，找一个简单点的题材开刀，先睹为快。
用在线脑图利器MindMeister写了个开发计划

截止到现在，一切按照计划，正在攻克技术问题中。
]]></description>
			<content:encoded><![CDATA[<p>从几个月前开始学<a href="http://blog.liuhongwei.cn/tag/objective-c/">Objective C</a>开始，断断续续也写了几个<a href="http://blog.liuhongwei.cn/category/iphone/">iPhone</a>小程序了。一直想写一个复杂点的游戏，无奈，时间都花在了向往已久的<a href="http://blog.sina.com.cn/s/articlelist_1400116791_3_1.html">巴厘岛</a>和<a href="http://blog.sina.com.cn/s/articlelist_1400116791_4_1.html">普吉岛</a>。计划一次次的流产，再不发布，就成纸上谈兵了。这个周末，决定利用3天时间写出一个先，不需要太复杂，毕竟复杂度和赚钱是两回事，找一个简单点的题材开刀，先睹为快。</p>
<p>用<a style="color: #2970a6; text-decoration: none; padding: 0px; margin: 0px;" title="在线脑图制作利器：MindMeister" href="http://blog.liuhongwei.cn/web2/gtd-mindmeister/">在线脑图利器MindMeister</a>写了个开发计划</p>
<p><img class="alignnone size-full wp-image-107" title="first iphone app plan" src="http://blog.liuhongwei.cn/wp-content/uploads/2009/08/first-iphone-dev.gif" alt="first iphone app plan" width="696" height="460" /></p>
<p>截止到现在，一切按照计划，正在攻克技术问题中。</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.liuhongwei.cn/iphone/first-iphone-dev/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>10个iPhone开发网站、论坛、博客</title>
		<link>http://blog.liuhongwei.cn/iphone/10-iphone-dev/</link>
		<comments>http://blog.liuhongwei.cn/iphone/10-iphone-dev/#comments</comments>
		<pubDate>Wed, 19 Aug 2009 14:57:06 +0000</pubDate>
		<dc:creator>Harry</dc:creator>
				<category><![CDATA[iPhone]]></category>
		<category><![CDATA[Android]]></category>
		<category><![CDATA[Objective C]]></category>

		<guid isPermaLink="false">http://blog.liuhongwei.cn/?p=102</guid>
		<description><![CDATA[整理了一下手中的iPhone开发网站、论坛和博客，精选了这10个常去的网站。其中有2篇教学文章，由于非常经典，于是单列出来，与其网站并列。本文的短网址为 http://bit.ly/3llz7
建议新入行的朋友在看教学文章的同时多上论坛，与大家交流，偶尔看看别人的自曝，自己也会信心倍增。另外，实践最重要，首先行动起来。
http://cocoachina.com/ 大量iPhone开发资料，教学，经验，还有自曝。
http://www.javaeye.com/forums/board/mobile iPhone开发论坛，人气鼎盛，大量自曝，还有Android的讨论
http://developer.apple.com/iphone/ 苹果iPhone开发官方主页，提供大量实例、文档和教学视频
http://www.stanford.edu/class/cs193p/ 斯坦福大学的iPhone课程，2009年4～6月，有pdf和视频下载
http://bit.ly/RuaKq 飞机游戏iFighter的作者dr_watson写的iPhone游戏开发经典教学系列，有源码
http://www.iphoneside.com/ iPhone达人的博客，很多有价值的资源下载，新闻和教程
http://lichen1985.com/blog/ iPhone应用的作者，雨雪霏霏的iPhone博客，很多开发手记和心得
http://blog.liuhongwei.cn/category/iphone/ iPhone开发博客，提供教学文章，经验分享，还有GAE
http://www.javaeye.com/topic/422948 iPhone日本市场高手的自曝贴，第1个月就赚了2千刀，大量详细的数字和图片
http://dev.iphonetw.net/ 台湾iPhone开发者论坛，有些教学文章和讨论
]]></description>
			<content:encoded><![CDATA[<p><img class="alignleft size-full wp-image-103" title="iPhone SDK" src="http://blog.liuhongwei.cn/wp-content/uploads/2009/08/iphone-sdk.png" alt="iPhone SDK" width="102" height="95" />整理了一下手中的iPhone开发网站、论坛和博客，精选了这10个常去的网站。其中有2篇教学文章，由于非常经典，于是单列出来，与其网站并列。本文的短网址为 <a href="http://bit.ly/3llz7">http://bit.ly/3llz7</a></p>
<p>建议新入行的朋友在看教学文章的同时多上论坛，与大家交流，偶尔看看别人的自曝，自己也会信心倍增。另外，实践最重要，首先行动起来。</p>
<p><a href="http://cocoachina.com/">http://cocoachina.com/</a> 大量iPhone开发资料，教学，经验，还有自曝。</p>
<p><a href="http://www.javaeye.com/forums/board/mobile">http://www.javaeye.com/forums/board/mobile</a> iPhone开发论坛，人气鼎盛，大量自曝，还有Android的讨论</p>
<p><a href="http://developer.apple.com/iphone/">http://developer.apple.com/iphone/</a> 苹果iPhone开发官方主页，提供大量实例、文档和教学视频</p>
<p><a href="http://www.stanford.edu/class/cs193p/">http://www.stanford.edu/class/cs193p/</a> 斯坦福大学的iPhone课程，2009年4～6月，有pdf和视频下载</p>
<p><a href="http://bit.ly/RuaKq">http://bit.ly/RuaKq</a> 飞机游戏iFighter的作者dr_watson写的iPhone游戏开发经典教学系列，有源码</p>
<p><a href="http://www.iphoneside.com/">http://www.iphoneside.com/</a> iPhone达人的博客，很多有价值的资源下载，新闻和教程</p>
<p><a href="http://lichen1985.com/blog/">http://lichen1985.com/blog/</a> iPhone应用的作者，雨雪霏霏的iPhone博客，很多开发手记和心得</p>
<p><a href="http://blog.liuhongwei.cn/category/iphone/">http://blog.liuhongwei.cn/category/iphone/</a> iPhone开发博客，提供教学文章，经验分享，还有GAE</p>
<p><a href="http://www.javaeye.com/topic/422948">http://www.javaeye.com/topic/422948</a> iPhone日本市场高手的自曝贴，第1个月就赚了2千刀，大量详细的数字和图片</p>
<p><a href="http://dev.iphonetw.net/">http://dev.iphonetw.net/</a> 台湾iPhone开发者论坛，有些教学文章和讨论</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.liuhongwei.cn/iphone/10-iphone-dev/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>zt Objective C 入门诗，iPhone程序结构</title>
		<link>http://blog.liuhongwei.cn/iphone/objective-c-poetry-iphone-structure/</link>
		<comments>http://blog.liuhongwei.cn/iphone/objective-c-poetry-iphone-structure/#comments</comments>
		<pubDate>Sun, 28 Jun 2009 00:21:35 +0000</pubDate>
		<dc:creator>Harry</dc:creator>
				<category><![CDATA[iPhone]]></category>
		<category><![CDATA[Objective C]]></category>
		<category><![CDATA[教学]]></category>

		<guid isPermaLink="false">http://blog.liuhongwei.cn/?p=68</guid>
		<description><![CDATA[Objective C 快速入门诗
C没有类
这让人很疲惫
对象的说法很时髦
不就是继承封装组合人人会
右走是C++，这个大众都熟悉它
左走就是objective-c，躲在僻静僻静的麦金塔
本是同根生的C
如何高举面向对象的大旗
求同存异标新立异且听一一细分清

对象的C
是不同的C
类的处理与众不同重点要区分

不重复是我的口头禅
任何时候我只说一次告诉你我的地盘
    [@begincommand] &#124; @end就是我的指示
        @interface classname  声明类
        @implementation classname  实现类
        @protocol interfacename  声明接口
就是这么简单，你的一定要明白

我先声明对成员变量和方法的关系有远近
    成员变量大大括在我的怀
        关系远近 public [...]]]></description>
			<content:encoded><![CDATA[<p><strong>Objective C 快速入门诗</strong></p>
<pre style="line-height: 22px; padding: 0px; margin: 0px;">C没有类
这让人很疲惫
对象的说法很时髦
不就是继承封装组合人人会
右走是C++，这个大众都熟悉它
左走就是objective-c，躲在僻静僻静的麦金塔
本是同根生的C
如何高举面向对象的大旗
求同存异标新立异且听一一细分清

对象的C
是不同的C
类的处理与众不同重点要区分

不重复是我的口头禅
任何时候我只说一次告诉你我的地盘
    [@begincommand] | @end就是我的指示
        @interface classname  声明类
        @implementation classname  实现类
        @protocol interfacename  声明接口
就是这么简单，你的一定要明白

我先声明对成员变量和方法的关系有远近
<span style="line-height: 22px; color: #0000ff; padding: 0px; margin: 0px;"><span style="line-height: 22px; color: #000000; padding: 0px; margin: 0px;">    </span><strong>成员变量大大括在我的怀</strong></span>
        关系远近 public / protected / private 来区分
        若不声明全默默受着保护
        静态成员变量请不要放在此
    成员方法我不太爱
        前面拴着绳子置于类的变量列表外
<span style="line-height: 22px; color: #0000ff; padding: 0px; margin: 0px;"><span style="line-height: 22px; color: #000000; padding: 0px; margin: 0px;">            </span><strong>减号就是普通函数</strong></span>
<span style="line-height: 22px; color: #0000ff; padding: 0px; margin: 0px;"><span style="line-height: 22px; color: #000000; padding: 0px; margin: 0px;">            </span><strong>加号就是静态函数</strong></span>莫怪
        函数的声明有点怪
            我要一眼叫出名，包括函数名和参数名
            其余的<span style="line-height: 22px; color: #0000ff; padding: 0px; margin: 0px;"><strong>类型括起来</strong></span>，我有空再来慢慢看
            函数名和参数名之间用：分隔开
        多个参数的函数那就是更怪
            逗号其实不是我的爱
            后续的每个参数分隔用空白
            每个参数形式如 <span style="line-height: 22px; color: #0000ff; padding: 0px; margin: 0px;"><strong>标签：(参数类型)参数名</strong></span>
            其实只要把函数名看作是第一个参数标签
            你就能领悟其中的奥妙并在调用时喜爱
        成员方法太多我才懒得区分亲疏远近
            它们一律都是公之于众要好好的干活
            谁若不服胆敢出头犯上
            就踢出头文件打入冷宫永世不能露面试试看
<span style="line-height: 22px; color: #0000ff; padding: 0px; margin: 0px;"><span style="line-height: 22px; color: #000000; padding: 0px; margin: 0px;">        </span><strong>所有的成员方法都是虚函数</strong></span>
            改则重载，不改就继承
            不用任何标记请放心大胆随便使用

对象的类，在继承层次上考虑才显得重要
    所有的类最终都继承于NSObject
        因为它给你创建自己生命的方法

    不继承于NSObject的只能是接口protocol
        它没有成员变量只有方法
        它只有声明不用实现
        这点和java很相似

当然类还有一些绝活可以让你开开眼
    可以动态的扩充一个类 而不总是用继承
        @interface CClassA(Category)|@end
        @implementation CClassA (Category)|@end
        源代码外包含该 类的头文件
        就可以使用该Category中的方法

也可以动态的替换一个类
    但是只限于用继承类来替换基类功能
        [CInheritClass poseAsClass: [CBaseClass class]];
    声明之后用基类创建的对象实际上行为都是继承类

所以一个类的完整声明如下：
<span style="line-height: 22px; color: #0000ff; padding: 0px; margin: 0px;"><span style="line-height: 22px; color: #000000; padding: 0px; margin: 0px;">    </span><strong>@interface CClassA(Category): CBaseClass&lt;IA,IB...&gt;</strong></span>
    类别，基类，接口一一具全
    加上静态 虚函数
    所有特性和C++均可对应
    再加上所独有的特性
    这一特性编译类语言很少有
    设计得当完全可以实现动态调用dll切换功能

类的定义和使用，也有点怪
    想想看一个对象的生命周期，该是如何办
        创建很是别扭
            这样就定义了一个类对象，
            CClassName* pA = [[CClassName alloc] init];
            能且只能返回对象指针
    释放分为两种
        自动释放声明后 [pA autorelease]; 以后可以不管
        否则就必须配对 [pA release];
    注意类的构造函数init可以捕获
    但是<span style="line-height: 22px; color: #0000ff; padding: 0px; margin: 0px;"><strong>析构函数却没有</strong></span>这点很让人意外

    使用类也有多种情况
        调用成员方法用中括号     int nRtn = [pA method:param1];
        而静态成员方法不需要对象 int nRtn = [CClassName method];
        调用成员变量还是C格式    pA-&gt;m_nCount = 1;

    所有的类，都可以对应一个id类型
        用来引用一个对象               id     cur = sq;
        或者用来引用一个对象指定的接口 id&lt;IA&gt; cur = sq;
        然后就可以调用该对象的方法和指定接口方法</pre>
<p><strong>Iphone APP程序结构</strong></p>
]]></content:encoded>
			<wfw:commentRss>http://blog.liuhongwei.cn/iphone/objective-c-poetry-iphone-structure/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>从 C 到 Objective C 入门2</title>
		<link>http://blog.liuhongwei.cn/iphone/objective-c-2/</link>
		<comments>http://blog.liuhongwei.cn/iphone/objective-c-2/#comments</comments>
		<pubDate>Sun, 14 Jun 2009 07:39:22 +0000</pubDate>
		<dc:creator>Harry</dc:creator>
				<category><![CDATA[iPhone]]></category>
		<category><![CDATA[Objective C]]></category>
		<category><![CDATA[教学]]></category>

		<guid isPermaLink="false">http://blog.liuhongwei.cn/?p=54</guid>
		<description><![CDATA[在Objective C入门中我们了解了如何定义类，类的实现，以及调用类函数的方式。现在再来看一看关于类的高级概念。
id，动态绑定

#import &#60;stdio.h&#62;
#import &#34;Bank.h&#34;
&#160;
int main&#40; int argc, const char *argv&#91;&#93; &#41; &#123;
    Bank *bank1= &#91;&#91;Bank alloc&#93; init&#93;;
    Bank *bank2= &#91;&#91;Bank alloc&#93; init&#93;;
    id b; //可以把任何对象赋值给b
&#160;
    &#91;bank1 addAmount: 1&#93;;
    b = bank1;
    &#91;b print&#93;; //调用bank1的print函数
    [...]]]></description>
			<content:encoded><![CDATA[<p>在<a href="http://blog.liuhongwei.cn/iphone/objective-c/">Objective C入门</a>中我们了解了如何定义类，类的实现，以及调用类函数的方式。现在再来看一看关于类的高级概念。</p>
<h2>id，动态绑定</h2>

<div class="wp_syntax"><div class="code"><pre class="objc" style="font-family:monospace;"><span style="color: #6e371a;">#import &lt;stdio.h&gt;</span>
<span style="color: #6e371a;">#import &quot;Bank.h&quot;</span>
&nbsp;
<span style="color: #a61390;">int</span> main<span style="color: #002200;">&#40;</span> <span style="color: #a61390;">int</span> argc, <span style="color: #a61390;">const</span> <span style="color: #a61390;">char</span> <span style="color: #002200;">*</span>argv<span style="color: #002200;">&#91;</span><span style="color: #002200;">&#93;</span> <span style="color: #002200;">&#41;</span> <span style="color: #002200;">&#123;</span>
    Bank <span style="color: #002200;">*</span>bank1<span style="color: #002200;">=</span> <span style="color: #002200;">&#91;</span><span style="color: #002200;">&#91;</span>Bank alloc<span style="color: #002200;">&#93;</span> init<span style="color: #002200;">&#93;</span>;
    Bank <span style="color: #002200;">*</span>bank2<span style="color: #002200;">=</span> <span style="color: #002200;">&#91;</span><span style="color: #002200;">&#91;</span>Bank alloc<span style="color: #002200;">&#93;</span> init<span style="color: #002200;">&#93;</span>;
    <span style="color: #a61390;">id</span> b; <span style="color: #11740a; font-style: italic;">//可以把任何对象赋值给b</span>
&nbsp;
    <span style="color: #002200;">&#91;</span>bank1 addAmount<span style="color: #002200;">:</span> <span style="color: #2400d9;">1</span><span style="color: #002200;">&#93;</span>;
    b <span style="color: #002200;">=</span> bank1;
    <span style="color: #002200;">&#91;</span>b print<span style="color: #002200;">&#93;</span>; <span style="color: #11740a; font-style: italic;">//调用bank1的print函数</span>
    b <span style="color: #002200;">=</span> bank2;
    <span style="color: #002200;">&#91;</span>b print<span style="color: #002200;">&#93;</span>; <span style="color: #11740a; font-style: italic;">//调用bank2的print函数</span>
&nbsp;
    <span style="color: #11740a; font-style: italic;">// true</span>
    <span style="color: #a61390;">if</span> <span style="color: #002200;">&#40;</span> <span style="color: #002200;">&#91;</span>bank1 isMemberOfClass<span style="color: #002200;">:</span> <span style="color: #002200;">&#91;</span>Bank class<span style="color: #002200;">&#93;</span><span style="color: #002200;">&#93;</span> <span style="color: #002200;">==</span> <span style="color: #a61390;">YES</span> <span style="color: #002200;">&#41;</span> <span style="color: #002200;">&#123;</span>
        <span style="color: #a61390;">printf</span><span style="color: #002200;">&#40;</span> <span style="color: #bf1d1a;">&quot;bank1是Bank类的一个对象<span style="color: #2400d9;">\n</span>&quot;</span> <span style="color: #002200;">&#41;</span>;
    <span style="color: #002200;">&#125;</span>
&nbsp;
    <span style="color: #11740a; font-style: italic;">// true</span>
    <span style="color: #a61390;">if</span> <span style="color: #002200;">&#40;</span> <span style="color: #002200;">&#91;</span>bank1 respondsToSelector<span style="color: #002200;">:</span> <span style="color: #a61390;">@selector</span><span style="color: #002200;">&#40;</span> addAmount<span style="color: #002200;">:</span> <span style="color: #002200;">&#41;</span><span style="color: #002200;">&#93;</span> <span style="color: #002200;">==</span> <span style="color: #a61390;">YES</span> <span style="color: #002200;">&#41;</span> <span style="color: #002200;">&#123;</span>
        <span style="color: #a61390;">printf</span><span style="color: #002200;">&#40;</span> <span style="color: #bf1d1a;">&quot;bank1响应addAmount:函数<span style="color: #2400d9;">\n</span>&quot;</span> <span style="color: #002200;">&#41;</span>;
    <span style="color: #002200;">&#125;</span>
&nbsp;
    <span style="color: #11740a; font-style: italic;">// free memory</span>
    <span style="color: #002200;">&#91;</span>bank1 <span style="color: #a61390;">free</span><span style="color: #002200;">&#93;</span>;
    <span style="color: #002200;">&#91;</span>b <span style="color: #a61390;">free</span><span style="color: #002200;">&#93;</span>;
&nbsp;
    <span style="color: #a61390;">return</span> <span style="color: #2400d9;">0</span>;
<span style="color: #002200;">&#125;</span></pre></div></div>

<p>id类型可以接受各种类型的对象，然后调用对应的函数。调用函数时，Objective C在编译的时候并不会检查该对象是否有该函数，需要开发人员自己确保调用的有效。另外Objective C也提供功能，在运行时检查某对象是否具有某函数。</p>
<h2>类的高级使用：继承、类别、扮演、协议</h2>

<div class="wp_syntax"><div class="code"><pre class="objc" style="font-family:monospace;"><span style="color: #11740a; font-style: italic;">////////////// BankMath.h</span>
<span style="color: #6e371a;">#import &quot;Bank.h&quot;</span>
<span style="color: #a61390;">@interface</span> Bank<span style="color: #002200;">&#40;</span>Math<span style="color: #002200;">&#41;</span> <span style="color: #11740a; font-style: italic;">//为类Bank定义一个类别Math</span>
<span style="color: #002200;">-</span><span style="color: #002200;">&#40;</span><span style="color: #a61390;">void</span><span style="color: #002200;">&#41;</span> add<span style="color: #002200;">:</span> <span style="color: #002200;">&#40;</span><span style="color: #a61390;">int</span><span style="color: #002200;">&#41;</span> b; <span style="color: #11740a; font-style: italic;">//Math中的函数add</span>
<span style="color: #002200;">-</span><span style="color: #002200;">&#40;</span><span style="color: #a61390;">void</span><span style="color: #002200;">&#41;</span> sub<span style="color: #002200;">:</span> <span style="color: #002200;">&#40;</span><span style="color: #a61390;">int</span><span style="color: #002200;">&#41;</span> b; <span style="color: #11740a; font-style: italic;">//Math中的函数sub</span>
<span style="color: #a61390;">@end</span>
&nbsp;
<span style="color: #a61390;">@protocol</span> Auditable <span style="color: #11740a; font-style: italic;">//定义一个协议</span>
<span style="color: #002200;">-</span><span style="color: #002200;">&#40;</span><span style="color: #a61390;">void</span><span style="color: #002200;">&#41;</span> audit; <span style="color: #11740a; font-style: italic;">//其中包括一个函数audit的定义</span>
<span style="color: #a61390;">@end</span>
&nbsp;
<span style="color: #a61390;">@interface</span> ExBank<span style="color: #002200;">:</span> Bank&lt;Auditable&gt; <span style="color: #11740a; font-style: italic;">//ExBank类继承Bank，同时实现Auditable协议</span>
<span style="color: #002200;">-</span><span style="color: #002200;">&#40;</span><span style="color: #a61390;">void</span><span style="color: #002200;">&#41;</span> print; <span style="color: #11740a; font-style: italic;">//定义一个新的函数print，覆盖父类Bank中的print函数</span>
<span style="color: #a61390;">@end</span>
&nbsp;
<span style="color: #11740a; font-style: italic;">////////////// 实现部分 BankMath.m</span>
<span style="color: #6e371a;">#import &quot;BankMath.h&quot;</span>
<span style="color: #a61390;">@implementation</span> Bank <span style="color: #002200;">&#40;</span>Math<span style="color: #002200;">&#41;</span> <span style="color: #11740a; font-style: italic;">//Bank的类别Math的实现部分</span>
<span style="color: #002200;">-</span><span style="color: #002200;">&#40;</span><span style="color: #a61390;">void</span><span style="color: #002200;">&#41;</span> add<span style="color: #002200;">:</span> <span style="color: #002200;">&#40;</span><span style="color: #a61390;">int</span><span style="color: #002200;">&#41;</span> f <span style="color: #002200;">&#123;</span>
    amount <span style="color: #002200;">++</span>;
<span style="color: #002200;">&#125;</span>
<span style="color: #002200;">-</span><span style="color: #002200;">&#40;</span><span style="color: #a61390;">void</span><span style="color: #002200;">&#41;</span> sub<span style="color: #002200;">:</span> <span style="color: #002200;">&#40;</span><span style="color: #a61390;">int</span><span style="color: #002200;">&#41;</span> f <span style="color: #002200;">&#123;</span>
    amount <span style="color: #002200;">--</span>;
<span style="color: #002200;">&#125;</span>
<span style="color: #a61390;">@end</span>
&nbsp;
<span style="color: #a61390;">@implementation</span> ExBank
<span style="color: #11740a; font-style: italic;">// 实现新定义的函数print</span>
<span style="color: #002200;">-</span><span style="color: #002200;">&#40;</span><span style="color: #a61390;">void</span><span style="color: #002200;">&#41;</span> print <span style="color: #002200;">&#123;</span>
    <span style="color: #a61390;">printf</span><span style="color: #002200;">&#40;</span><span style="color: #bf1d1a;">&quot;ExBank amount=%i&quot;</span>, amount<span style="color: #002200;">&#41;</span>;
<span style="color: #002200;">&#125;</span>
<span style="color: #11740a; font-style: italic;">// 实现协议中包含的函数audit</span>
<span style="color: #002200;">-</span><span style="color: #002200;">&#40;</span><span style="color: #a61390;">void</span><span style="color: #002200;">&#41;</span> audit <span style="color: #002200;">&#123;</span>
    <span style="color: #a61390;">printf</span><span style="color: #002200;">&#40;</span><span style="color: #bf1d1a;">&quot;audit: amount=%i&quot;</span>, amount<span style="color: #002200;">&#41;</span>;
<span style="color: #002200;">&#125;</span>
<span style="color: #a61390;">@end</span>
&nbsp;
<span style="color: #11740a; font-style: italic;">////////////// main.m</span>
<span style="color: #6e371a;">#import  &lt;stdio.h&gt;</span>
<span style="color: #6e371a;">#import &quot;Bank.h&quot;</span>
&nbsp;
<span style="color: #a61390;">int</span> main<span style="color: #002200;">&#40;</span> <span style="color: #a61390;">int</span> argc, <span style="color: #a61390;">const</span> <span style="color: #a61390;">char</span> <span style="color: #002200;">*</span>argv<span style="color: #002200;">&#91;</span><span style="color: #002200;">&#93;</span> <span style="color: #002200;">&#41;</span> <span style="color: #002200;">&#123;</span>
    Bank <span style="color: #002200;">*</span>bank <span style="color: #002200;">=</span> <span style="color: #002200;">&#91;</span><span style="color: #002200;">&#91;</span>Bank alloc<span style="color: #002200;">&#93;</span> init<span style="color: #002200;">&#93;</span>;
     <span style="color: #002200;">&#91;</span>bank add<span style="color: #002200;">:</span> <span style="color: #2400d9;">10</span><span style="color: #002200;">&#93;</span>; <span style="color: #11740a; font-style: italic;">//直接使用Bank对象类别Math中的函数</span>
     <span style="color: #002200;">&#91;</span>bank sub<span style="color: #002200;">:</span> <span style="color: #2400d9;">5</span><span style="color: #002200;">&#93;</span>; <span style="color: #11740a; font-style: italic;">//直接使用Bank对象类别Math中的函数</span>
     <span style="color: #002200;">&#91;</span>bank print<span style="color: #002200;">&#93;</span>;
&nbsp;
     <span style="color: #002200;">&#91;</span>ExBank poseAsClass<span style="color: #002200;">:</span> <span style="color: #002200;">&#91;</span>Bank class<span style="color: #002200;">&#93;</span><span style="color: #002200;">&#93;</span>; <span style="color: #11740a; font-style: italic;">//使用ExBank来扮演Bank</span>
     Bank <span style="color: #002200;">*</span>bank2 <span style="color: #002200;">=</span> <span style="color: #002200;">&#91;</span><span style="color: #002200;">&#91;</span>Bank alloc<span style="color: #002200;">&#93;</span> init<span style="color: #002200;">&#93;</span>; <span style="color: #11740a; font-style: italic;">//对Bank的调用，就是对ExBank的调用</span>
     <span style="color: #002200;">&#91;</span>bank2 print<span style="color: #002200;">&#93;</span>; <span style="color: #11740a; font-style: italic;">//调用ExBank的print函数</span>
    <span style="color: #002200;">&#91;</span>bank2 audit<span style="color: #002200;">&#93;</span>; <span style="color: #11740a; font-style: italic;">//调用ExBank的audit函数</span>
&nbsp;
    <span style="color: #a61390;">id</span> auditable <span style="color: #002200;">=</span> bank2; <span style="color: #11740a; font-style: italic;">//为auditable赋值bank2</span>
    <span style="color: #002200;">&#91;</span>auditable audit<span style="color: #002200;">&#93;</span>; <span style="color: #11740a; font-style: italic;">//调用bank2的函数audit</span>
    <span style="color: #11740a; font-style: italic;">//[auditable print]; //不行，因为Auditable类型中没有该函数</span>
&nbsp;
     <span style="color: #002200;">&#91;</span>bank <span style="color: #a61390;">free</span><span style="color: #002200;">&#93;</span>; <span style="color: #11740a; font-style: italic;">// 释放对象</span>
    <span style="color: #002200;">&#91;</span>bank2 <span style="color: #a61390;">free</span><span style="color: #002200;">&#93;</span>; <span style="color: #11740a; font-style: italic;">// 释放对象</span>
&nbsp;
    <span style="color: #a61390;">return</span> <span style="color: #2400d9;">0</span>;
<span style="color: #002200;">&#125;</span></pre></div></div>

<ul>
<li>
<div lang="objc">类定义@interface，相当于Java和C++中的class</div>
</li>
<li>
<div lang="objc">继承，与Java继承类似，没有C++中继承的那么多繁琐的访问范围差别</div>
</li>
<li>
<div lang="objc">类别（categories），是用来扩展类的好办法，比继承更方便，因为你不需要有源代码就可以扩充某个类。</div>
</li>
<li>
<div lang="objc">扮演（Posting），可以在运行时指定用某个类A来替代另一个类B，这样此后所有对B的调用都是对A的调用。</div>
</li>
<li>
<div lang="objc">协议（@protocol），相当于Java的接口，或C++的abstract class。定义在其中的函数只有定义而不需要实现。使用协议的时候，一个类可以实现多个协议，多个协议之间用逗号分隔列出。</div>
</li>
</ul>
]]></content:encoded>
			<wfw:commentRss>http://blog.liuhongwei.cn/iphone/objective-c-2/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>
