• <ins id="pjuwb"></ins>
    <blockquote id="pjuwb"><pre id="pjuwb"></pre></blockquote>
    <noscript id="pjuwb"></noscript>
          <sup id="pjuwb"><pre id="pjuwb"></pre></sup>
            <dd id="pjuwb"></dd>
            <abbr id="pjuwb"></abbr>

            羅朝輝(飄飄白云)

            關(guān)注嵌入式操作系統(tǒng),移動(dòng)平臺(tái),圖形開(kāi)發(fā)。-->加微博 ^_^

              C++博客 :: 首頁(yè) :: 新隨筆 :: 聯(lián)系 :: 聚合  :: 管理 ::
              85 隨筆 :: 0 文章 :: 169 評(píng)論 :: 0 Trackbacks

            Cocoa 開(kāi)發(fā)

            Mac, iPhone/iPad開(kāi)發(fā)相關(guān)的東東
                 摘要: KVO 并不是什么新事物,換湯不換藥,它只是觀察者模式在 Objective C 中的一種運(yùn)用,這是 KVO 的指導(dǎo)思想所在。其他語(yǔ)言實(shí)現(xiàn)中也有“KVO”,如 WPF 中的 binding。而在 Objective C 中又是通過(guò)強(qiáng)大的 runtime 來(lái)實(shí)現(xiàn)自動(dòng)鍵值觀察的。本文對(duì) KVO 的使用以及注意事項(xiàng),內(nèi)部實(shí)現(xiàn)都詳細(xì)介紹了一番,對(duì) KVO 的理解又深入一層了。Objective 中的 KVO 雖然可以用,但卻非完美,有興趣的了解朋友請(qǐng)查看《KVO 的缺陷》 以及改良實(shí)現(xiàn) MAKVONotificationCenter 。  閱讀全文
            posted @ 2012-11-17 17:41 羅朝輝 閱讀(21922) | 評(píng)論 (4)  編輯

                 摘要: 如果我們?cè)?Objective C 中向一個(gè)對(duì)象發(fā)送它無(wú)法處理的消息,會(huì)出現(xiàn)什么情況呢?根據(jù)前文《深入淺出Cocoa之消息》的介紹,我們知道發(fā)送消息是通過(guò) objc_send(id, SEL, ...) 來(lái)實(shí)現(xiàn)的,它會(huì)首先在對(duì)象的類對(duì)象的 cache,method list 以及父類對(duì)象的 cache, method list 中依次查找 SEL 對(duì)應(yīng)的 IMP;如果沒(méi)有找到且實(shí)現(xiàn)了動(dòng)態(tài)方法決議機(jī)制就會(huì)進(jìn)行決議,如果沒(méi)有實(shí)現(xiàn)動(dòng)態(tài)方法決議機(jī)制或決議失敗且實(shí)現(xiàn)了消息轉(zhuǎn)發(fā)機(jī)制就會(huì)進(jìn)入消息轉(zhuǎn)發(fā)流程,否則程序 crash。也就是說(shuō)如果同時(shí)提供了動(dòng)態(tài)方法決議和消息轉(zhuǎn)發(fā),那么動(dòng)態(tài)方法決議先于消息轉(zhuǎn)發(fā),只有當(dāng)動(dòng)態(tài)方法決議依然無(wú)法正確決議 selector 的實(shí)現(xiàn),才會(huì)嘗試進(jìn)行消息轉(zhuǎn)發(fā)。在前文中,我并沒(méi)有詳細(xì)講解動(dòng)態(tài)方法決議,因此本文將詳細(xì)介紹之。  閱讀全文
            posted @ 2012-11-14 23:53 羅朝輝 閱讀(2370) | 評(píng)論 (0)  編輯

                 摘要: iOS 游戲開(kāi)發(fā)教程資源,來(lái)自 http://www.raywenderlich.com  閱讀全文
            posted @ 2012-11-10 22:45 羅朝輝 閱讀(1097) | 評(píng)論 (0)  編輯

                 摘要: XCode 內(nèi)置GDB,我們可以在命令行中使用 GDB 命令來(lái)調(diào)試我們的程序。下面將介紹一些常用的命令以及調(diào)試技巧。  閱讀全文
            posted @ 2012-01-31 16:19 羅朝輝 閱讀(3282) | 評(píng)論 (0)  編輯

                 摘要: 在前文中總結(jié)到“ObjC 為每個(gè)類的定義生成兩個(gè) objc_class ,一個(gè)即普通的 class,另一個(gè)即 metaclass。我們可以在運(yùn)行期創(chuàng)建這兩個(gè) objc_class 數(shù)據(jù)結(jié)構(gòu),然后使用 objc_addClass 動(dòng)態(tài)地創(chuàng)建新的類定義。”今天我們來(lái)如何在運(yùn)行時(shí)動(dòng)態(tài)創(chuàng)建類。下面這個(gè)函數(shù)就是應(yīng)用前面講到的Class,MetaClass的概念,在運(yùn)行時(shí)動(dòng)態(tài)創(chuàng)建一個(gè)類。  閱讀全文
            posted @ 2012-01-30 14:05 羅朝輝 閱讀(4678) | 評(píng)論 (2)  編輯

                 摘要: 最近打算寫一些ObjC中比較底層的東西,尤其是 runtime 相關(guān)的。從哪里入手呢?那當(dāng)然是最基本的類與對(duì)象。與C++相比,ObjC中的類與對(duì)象結(jié)構(gòu)要簡(jiǎn)潔與一致得多(參考《深度探索C++對(duì)象模型》,你就知道C++中類與對(duì)象結(jié)構(gòu)的復(fù)雜)。本文將詳細(xì)講解ObjC中類與對(duì)象的結(jié)構(gòu),下回將講如何在 runtime 時(shí)操作類。

            總結(jié):ObjC 為每個(gè)類的定義生成兩個(gè) objc_class ,一個(gè)即普通的 class,另一個(gè)即 metaclass。我們可以在運(yùn)行期創(chuàng)建這兩個(gè) objc_class 數(shù)據(jù)結(jié)構(gòu),然后使用 objc_addClass 動(dòng)態(tài)地創(chuàng)建新的類定義。這個(gè)夠動(dòng)態(tài)夠強(qiáng)大的吧?下回講演示如何在運(yùn)行期動(dòng)態(tài)創(chuàng)建新類。  閱讀全文
            posted @ 2012-01-19 16:58 羅朝輝 閱讀(4732) | 評(píng)論 (5)  編輯

                 摘要: Three20 是 facebook 開(kāi)源的一款功能齊全又強(qiáng)大的庫(kù),覆蓋 UI,network,JSON/XML解析等。其 github 倉(cāng)庫(kù)在這里:https://github.com/facebook/three20 ,這個(gè)頁(yè)面也有如何在工程中添加 three20 庫(kù)的介紹,不過(guò)在 Lion 系統(tǒng)下以及 xcode 4.2 下有些許不同,英文好的同學(xué)可以參看原文。現(xiàn)整理如下:  閱讀全文
            posted @ 2011-12-31 17:45 羅朝輝 閱讀(2797) | 評(píng)論 (0)  編輯

                 摘要: 使用 OCMock 進(jìn)行 unit test 時(shí),我們無(wú)法使用 stub 或 expect 測(cè)試類方法,那么又該怎樣測(cè)試類方法呢?
            下面是一個(gè)解決辦法:在測(cè)試類中的非類方法 wrap 一下類方法,然后測(cè)試 wrap 方法。  閱讀全文
            posted @ 2011-12-27 14:34 羅朝輝 閱讀(2298) | 評(píng)論 (0)  編輯

                 摘要: XCode 內(nèi)置了 OCUnit 單元測(cè)試框架,但目前最好用的測(cè)試框架應(yīng)該是 GHUnit。通過(guò) GHUnit + OCMock 組合,我們可以在 iOS 下進(jìn)行較強(qiáng)大的單元測(cè)試功能。本文將演示如何在 XCode 4.2 下使用 OCUnit, GHUnit 和 OCMock 進(jìn)行 iOS 單元測(cè)試。  閱讀全文
            posted @ 2011-12-23 14:12 羅朝輝 閱讀(3020) | 評(píng)論 (1)  編輯

                 摘要: 花了幾天時(shí)間,在 iPad 上做了一個(gè)簡(jiǎn)陋的 Dicom Viewer,這個(gè)查看器沒(méi)有使用 DCMTK 庫(kù)(雖然可用,但太龐大,造造輪子亦有樂(lè)趣),而是自己移植了一個(gè) Dicom 文件解析器(Thanks to Amarnath S and his great post.)。該Dicom 文件解析器以及開(kāi)源,源代碼在這里 or https://github.com/kesalin/DicomViewer。
            先來(lái)看看效果圖:  閱讀全文
            posted @ 2011-11-18 06:51 羅朝輝 閱讀(9610) | 評(píng)論 (0)  編輯

                 摘要: DCMTK是德國(guó) Offis 公司開(kāi)發(fā)的實(shí)現(xiàn) DICOM 協(xié)議的跨平臺(tái)開(kāi)源 C++庫(kù),在醫(yī)學(xué)領(lǐng)域里是很有名的,它支持Windows ,Linux,Mac OS,SUN等平臺(tái)。不過(guò)貌似在 iOS 平臺(tái)上編譯 DCMTK 的文檔很少很少,折騰了好久終于編譯成功了,記錄下來(lái)。  閱讀全文
            posted @ 2011-11-10 12:59 羅朝輝 閱讀(9381) | 評(píng)論 (13)  編輯

                 摘要: 前文已經(jīng)說(shuō)了如何配置服務(wù)器,下面來(lái)演示如何創(chuàng)建一個(gè)新倉(cāng)庫(kù),然后與 XCode 結(jié)合。  閱讀全文
            posted @ 2011-11-08 17:54 羅朝輝 閱讀(8677) | 評(píng)論 (0)  編輯

                 摘要: XCode 默認(rèn)支持 Git 作為代碼倉(cāng)庫(kù),當(dāng)我們新建一個(gè)倉(cāng)庫(kù)的時(shí)候,可以勾選創(chuàng)建默認(rèn)倉(cāng)庫(kù),只不過(guò)這個(gè)倉(cāng)庫(kù)是在本地的。本文介紹如何在 mac 機(jī)器上創(chuàng)建 Git 服務(wù)器,總體思路是:使用 gitosis 來(lái)簡(jiǎn)化創(chuàng)建過(guò)程,在用作服務(wù)器的機(jī)器上創(chuàng)建一個(gè)名為 git 的賬戶來(lái)創(chuàng)建 git 服務(wù)器,其他客戶端通過(guò) ssh 機(jī)制訪問(wèn) git 服務(wù)器。  閱讀全文
            posted @ 2011-11-07 16:09 羅朝輝 閱讀(9794) | 評(píng)論 (2)  編輯

                 摘要: [譯]蘋果 Cocoa 編碼規(guī)范中文版
            官方文檔:Coding Guidelines for Cocoa
            本文檔下載:點(diǎn)擊這里  閱讀全文
            posted @ 2011-11-03 16:02 羅朝輝 閱讀(5528) | 評(píng)論 (1)  編輯

                 摘要: Objective C 的類方法(class method),即 static 方法,是用 + 修飾的方法。類方法是屬于類對(duì)象的,所以無(wú)需創(chuàng)建類的實(shí)例對(duì)象我們就可以直接使用它們。使用形式為:
            [ClassName classMethod];
            在這里 ClassName 代表的就是一個(gè)類對(duì)象,而不是作為一種類型。類名只有出現(xiàn)在接收消息的表達(dá)式中才代表一個(gè)類對(duì)象,其他情況下都表示一種類型。  閱讀全文
            posted @ 2011-11-01 17:14 羅朝輝 閱讀(2815) | 評(píng)論 (2)  編輯

                 摘要: 在前文 深入淺出 Cocoa 之 Framework 中講解了 Framework,接下來(lái)講解 plugin。如果你對(duì) Framework 還不太熟悉的話,請(qǐng)閱讀那篇文中,在本例中使用到了 framework,并在本文中沒(méi)有詳細(xì)講述其創(chuàng)建和使用過(guò)程。

            為什么要引入插件?
            我們知道編譯程序時(shí),會(huì)連接相關(guān) framework,通常我們所連接的框架是 Foundation 和 Application 框架。當(dāng)程序啟動(dòng)運(yùn)行時(shí),每個(gè)被連接到的 framework 都會(huì)被加載到該程序的 objc 運(yùn)行時(shí)環(huán)境中。如果我們想向正在運(yùn)行的程序加載新的 framework,那該怎么辦呢?答案之一就是使用 plugin 機(jī)制。cocoa 的 plugin 機(jī)制通常由 NSBundle 類來(lái)實(shí)現(xiàn),而實(shí)現(xiàn)動(dòng)態(tài)加載的功能由函數(shù) objc_addClass 來(lái)完成。一般我們無(wú)需與 objc_addClass 這個(gè)函數(shù)打交道,我們使用 NSBundle 來(lái)完成絕大部分與 plugin 相關(guān)的工作。

            plugin 機(jī)制能夠讓我們開(kāi)發(fā)出高度模塊化,可定制以及可擴(kuò)展的應(yīng)用程序,并  閱讀全文
            posted @ 2011-10-28 14:44 羅朝輝 閱讀(2566) | 評(píng)論 (0)  編輯

                 摘要: Framework 簡(jiǎn)介
            Mac OS X 擴(kuò)展了 framework 的功能,讓我們能夠利用它來(lái)共享代碼和資源。framework 在概念上有點(diǎn)像 Window 下的庫(kù),但是比庫(kù)更加強(qiáng)大,通過(guò) framework 我們可以共享所有形式的資源,如動(dòng)態(tài)共享庫(kù),nib 文件,圖像字符資源以及文檔等。系統(tǒng)會(huì)在需要的時(shí)候?qū)?framework 載入內(nèi)存中,多個(gè)應(yīng)用程序可以同時(shí)使用同一個(gè) framework,而內(nèi)存中的拷貝只有一份。一個(gè) framework 同時(shí)也是一個(gè) bundle,我們可以在 finder 里瀏覽其內(nèi)容,也可以在代碼中通過(guò) NSBundle 訪問(wèn)它。利用 framework 我們可以實(shí)現(xiàn)動(dòng)態(tài)或靜態(tài)庫(kù)的功能。與動(dòng)態(tài)/靜態(tài)庫(kù)相比,framework 有如下優(yōu)勢(shì):  閱讀全文
            posted @ 2011-10-16 14:10 羅朝輝 閱讀(4428) | 評(píng)論 (3)  編輯

                 摘要: 最近在研究如何在 Mac 上使用 .Net,在這個(gè)過(guò)程中,找到幾個(gè)好玩的東西:
            第一個(gè)是,CSharpPlugin,鏈接為:http://code.google.com/p/cocoa-sharp-dev/wiki/CSharpPlugin,這個(gè)插件很神奇,可以讓我們?cè)?XCode 中編寫 C#,并在編寫的C#中可以調(diào)用 Cocoa API,牛吧?可惜的是這個(gè)插件很久沒(méi)有更新了,最后的更新時(shí)間為 2007年5月。
            第二個(gè)是,MonoDevelop,鏈接為:http://monodevelop.com/,一般我們還需要安裝 Moonlight 。我們可以在其中編寫具有 Cocoa 界面風(fēng)格的 C# 程序。這個(gè) IDE 做得非常清爽,并在持續(xù)更新中。
            第三個(gè)是, 使用 Emonic 插件在 Eclipse 上開(kāi)發(fā),下面將介紹這種方式。  閱讀全文
            posted @ 2011-10-15 14:21 羅朝輝 閱讀(2923) | 評(píng)論 (2)  編輯

                 摘要: 本文通過(guò)使用 Bonjour 在 Mac 上實(shí)現(xiàn)了一個(gè)簡(jiǎn)單的服務(wù)器/客戶端聊天程序,以演示如何使用 Bonjour 進(jìn)行網(wǎng)絡(luò)編程,其中使用到 CFSokcet, NSNetService/NSNetServiceBrowser, NSInputStream/NSOutStream 的用法。  閱讀全文
            posted @ 2011-09-25 15:43 羅朝輝 閱讀(2557) | 評(píng)論 (0)  編輯

                 摘要: 前面講解了 Core Data 的框架,并完全手動(dòng)編寫代碼演示了 Core Data 的運(yùn)作過(guò)程。下面我們來(lái)演示如何結(jié)合 XCode 強(qiáng)大的可視化編輯以及 Cocoa 鍵值編碼,綁定機(jī)制來(lái)使用 Core Data。有了上面提到的哪些利器,在這個(gè)示例中,我們無(wú)需編寫 NSManagedObjectModel 代碼,也無(wú)需編寫 NSManagedObjectContext,工程模版在背后為我們做了這些事情。

            今天要完成的這個(gè)示例,有兩個(gè) Entity:StudentEntity 與 ClassEntity,各自有一個(gè)名為 name 的Attribute 其中 StudentEntity 通過(guò)一個(gè)名為 inClass 的 relationship 與 ClassEntity關(guān)聯(lián),而 ClassEntity 也有一個(gè)名為 students 的 relationship 與 Entity:StudentEntity 關(guān)聯(lián),這是一個(gè)一對(duì)多的關(guān)系。此外 ClassEntity 還有一個(gè)名為 monitor 的 relationship 關(guān)聯(lián)到 StudentEntity,代表該班的  閱讀全文
            posted @ 2011-09-09 14:21 羅朝輝 閱讀(3231) | 評(píng)論 (0)  編輯

                 摘要: NSWorkspace 為應(yīng)用程序提供如下服務(wù):
            1)打開(kāi),操作文件/設(shè)備,獲取文件/設(shè)備信息
            2)跟蹤文件,設(shè)備以及數(shù)據(jù)庫(kù)的變動(dòng)
            3)設(shè)置或獲取文件的 Finder 信息
            4)啟動(dòng)應(yīng)用程序。  閱讀全文
            posted @ 2011-09-05 16:04 羅朝輝 閱讀(3210) | 評(píng)論 (0)  編輯

                 摘要: 前面詳細(xì)講解了 Core Data 的框架以及設(shè)計(jì)的類,下面我們來(lái)講解一個(gè)完全手動(dòng)編寫代碼使用這些類的示例,這個(gè)例子來(lái)自蘋果官方示例。在這個(gè)例子里面,我們打算做這樣一件事情:記錄程序運(yùn)行記錄(時(shí)間與 process id),并保存到xml文件中。我們使用 Core Data 來(lái)做這個(gè)事情。  閱讀全文
            posted @ 2011-09-03 23:16 羅朝輝 閱讀(3449) | 評(píng)論 (0)  編輯

                 摘要: Core data 是 Cocoa 中處理數(shù)據(jù),綁定數(shù)據(jù)的關(guān)鍵特性,其重要性不言而喻,但也比較復(fù)雜。Core Data 相關(guān)的類比較多,初學(xué)者往往不太容易弄懂。計(jì)劃用三個(gè)教程來(lái)講解這一部分:
            框架詳解:講解 Core data 框架,運(yùn)作過(guò)程,設(shè)計(jì)的類;
            Core data應(yīng)用程序示例:通過(guò)生成一個(gè)使用 Core data 的應(yīng)用程序來(lái)講解如何 在 XCode 4 中使用 Core data。
            手動(dòng)創(chuàng)建Core data示例:不利用框架自動(dòng)生成代碼,完全自己編寫所有的 Core data 相關(guān)代碼的命令行應(yīng)用程序來(lái)深入講解 Core data的使用。  閱讀全文
            posted @ 2011-09-01 14:14 羅朝輝 閱讀(5861) | 評(píng)論 (0)  編輯

                 摘要: block 是 Apple 在 GCC 4.2 中擴(kuò)充的新語(yǔ)法特性,其目的是支持多核并行編程。我們可以將 dispatch_queue 與 block 結(jié)合起來(lái)使用,方便進(jìn)行多線程編程。  閱讀全文
            posted @ 2011-08-26 13:23 羅朝輝 閱讀(12465) | 評(píng)論 (5)  編輯

                 摘要: 本文詳細(xì)講述了Object-C 中消息的里里外外,涉及類結(jié)構(gòu)class, SEL, IMP,消息的動(dòng)態(tài)綁定,消息轉(zhuǎn)發(fā)等。  閱讀全文
            posted @ 2011-08-15 20:20 羅朝輝 閱讀(7979) | 評(píng)論 (1)  編輯

                 摘要: Objective C 與 C++ 兩者最大的相同便是: 都是從 C 演化而來(lái)的面向?qū)ο笳Z(yǔ)言, 兩者都兼容標(biāo)準(zhǔn) C 語(yǔ)言; 兩者最大的不同便是: Objective C 提供了運(yùn)行期動(dòng)態(tài)綁定機(jī)制, 而 C++ 是編譯時(shí)靜態(tài)綁定, 并通過(guò)嵌入類(多重繼承)和虛函數(shù)(虛表)來(lái)模擬實(shí)現(xiàn). Objective C 在語(yǔ)言層次上支持動(dòng)態(tài)消息轉(zhuǎn)發(fā), 其函數(shù)調(diào)用語(yǔ)法為 [object function], 而且C++ 為 object->function(). 兩者的語(yǔ)義也有不同, 在 Objective C 里是說(shuō)發(fā)送消息到一個(gè)對(duì)象上, 至于這個(gè)對(duì)象能不能處理消息(也就是說(shuō)實(shí)現(xiàn)了這個(gè)函數(shù)與否)以及是處理還是轉(zhuǎn)發(fā)消息都不會(huì) crash, 而在 C++ 里是說(shuō)對(duì)象進(jìn)行了某個(gè)操作,如果對(duì)象沒(méi)有這個(gè)操作的話,要么編譯會(huì)報(bào)錯(cuò)(靜態(tài)綁定),要么程序會(huì) crash 掉的(動(dòng)態(tài)綁定).
              閱讀全文
            posted @ 2010-12-26 12:30 羅朝輝 閱讀(10522) | 評(píng)論 (7)  編輯

            久久精品青青草原伊人| 久久久久久久波多野结衣高潮| 久久久久成人精品无码中文字幕| 国产成人久久精品激情| 国产精品狼人久久久久影院| 亚洲精品无码久久久| 狠狠色丁香久久综合五月| 久久久久久一区国产精品| 久久精品国产久精国产思思| 精品熟女少妇aⅴ免费久久| 国产成人久久精品一区二区三区 | 国产成人无码精品久久久免费| 性高朝久久久久久久久久| 国产69精品久久久久777| 久久99久久99精品免视看动漫| 国产精品VIDEOSSEX久久发布| 亚洲精品国产字幕久久不卡| 久久精品国产精品亚洲人人| 国内精品伊人久久久久av一坑| 一级做a爰片久久毛片看看| 久久人人爽人人爽AV片| 久久久精品免费国产四虎| 波多野结衣中文字幕久久| 影音先锋女人AV鲁色资源网久久| 久久精品无码一区二区日韩AV| 国产精品一区二区久久| 久久精品国产99国产电影网| 97r久久精品国产99国产精| 久久天天躁狠狠躁夜夜96流白浆| 精品一二三区久久aaa片| 久久久国产亚洲精品| 色青青草原桃花久久综合| 狠狠色丁香久久婷婷综合_中| 开心久久婷婷综合中文字幕| 国产精品热久久毛片| 精品久久久久久无码国产| 久久精品国产WWW456C0M| 久久精品国产国产精品四凭| 亚洲国产成人久久一区WWW| 久久精品视频一| 看久久久久久a级毛片|