en

hi, it seems you are using microsoft internet explorer. it doesn't match web standard and causes problems browsing this site. please please please use mozilla firefox or google chrome instead. thank you!

zh

哦哦!您正在使用Internet Explorer 瀏覽器,它與我們的網頁標準並不相容,可能會導致畫面顯示不正常。
請改用 Mozilla Firefox 或者 Google Chrome 才能正常瀏覽本網站,謝謝!

7.01.2013

善用 #pragma mark Preprocessor 整理你的程式碼

如果你常使用專案樣板製作你的專案, 那麼 #pragma mark 這個前端處理程式你一定不會感到陌生,它是一個存在於 Clang(LLVM)編譯器中的輔助工具,就如字面上的意思它提供你整個程式碼區段一個標籤,好像你將來在重新檢視你的程式碼時,可以很快的找到你要的函式。

5.27.2013

取得並判斷物件的實體類別

在 Objective-C 中,所有的物件都是繼承 NSObject Class,所以 NSObject Class 也是在 Objective-C 中所有物件最頂層的超類別 SuperClass,下面示範我們就已最常被使用的 UIView Class為例,利用從 NSObject Class 中所繼承而來的方法函式,判斷該物件到底繼承或是屬於哪些類別,這些技巧也很常被使用在程式執行上,即時的查閱物件的類別並給予不同的處理方式。

5.20.2013

變數的 Setter 與 Getter

在程式中我們可以透過一個變數的 Setter 和 Getter 方法函式來設定或是取用該變數的數值,由於這兩個方法函式太常被使用了,導致一般人根本不會去注意它們底是怎麼產生的,下列示範提供幾種方式來產生或是改寫 Setter 和 Getter 方法函式,讓我們在存取相關的變數實體時,能有更多的應用。

1.21.2013

使用圖學的方法取得目標影像的平均亮度值

嚴格來說這篇文章與 iOS SDK 並沒有太大的關係,因為使用圖學的方法求出影像的亮度,可以應用於電腦圖學上的任何地方,但是基於 iOS SDK 中所提供的 API,並未能夠讓我們控制相機的光圈或是環境光源感應器 Proximity 的詳細參數,因此在實作上,若要取得目標影像的平均亮度,還是得仰賴圖學的原理。

12.26.2012

類似 Observer Pattern 的 NSNotificationCenter

在 Design Patterns 中的 Observer Pattern 主要目是用來解決一對多的物件之間的依附關係,只要物件狀態一有變動,就可以通知其他相依物件做跟更新的動作,舉個簡單的例子 Observer 就像是一個班級裡負責聯絡的窗口一樣,當班級內有人有訊息需要通知給所有人時,只要告訴這個聯絡窗口,之後就由聯絡窗口統一通知班級內的所有人,當然也包含發佈消息的這個人。在 Objective-C 裡我們並不需要真的去實作出 Observer Pattern,透過使用 NSNotificationCenter 也可以達到相同的效果。

12.16.2012

Blocks!你不得不學習的 iOS 4 coding 新技術!

Blocks 並不是要去阻擋什麼東西,Blocks 是雪豹作業系統以及 iOS 4 的新 coding 方式。Block 其實是一段由兩個大括弧所包含的程式碼,類似函數一樣,但是不需要在使用前先行在 .m 檔案裡面宣告,只要在你需要用到的時候,寫一個程式碼的區塊也就是 Block,然後利用他來執行所需的工作就可以了。

11.06.2012

關於 NSString 的二三事

NSString 是 Objective-C 語言中最常被使用的字串形式,原始 C 語言字串形式是由字元(Character)所組成,而 NSString 是由 Unichar 所組成,所能使用的位元數更廣,也能表達更多不同的字元,下面我們將介紹一些與 NSString 有關的常用語法。

7.10.2012

在兩個不同的 Class 之間傳遞參數的方法

Objective-C 是一個物件導向語言,基於物件導向的觀念,我們不太希望一個 Class(物件)過於龐大或是做太多的事情,所以往往會依物件的觀念將一個較大的個體拆成數個較小的 Class 來做表示,最後才將它們組合,雖然說這不見得是最好的作法,卻是最容易理解與實作的一種方式。既然一個較大的個體必須被分拆成數個容易實作的小物件,那麼這些小物件彼此之間的溝通就顯得格外重要,物件得溝通在此我們可以稱作是參數傳遞,參數傳遞都必須要花費相對成本,一支好的程式,必須在溝通成本與程式複雜度之間取得良好的平衡,並且同時具有容易維護與擴展的特性,關於這類的程式設計哲理可以參考「樣式導向(Design Pattern)」的相關書籍,都會有不錯的收穫。

6.11.2012

NSNumber 的格式化類型

  

對於常常處理不同的數值格式輸出時,是不是會覺得很困擾,如果你也有這類的煩惱,何不考慮使用 NSNumberFormatter 中的 setNumberStyle 方法函式,替你的數值格式化成不同的輸出格式,不過有個前提,你必需先將你手邊的數值轉換成 NSNumber 型態的物件,NSNumber 是在 Objective-C 中很常被使用來處理數值相關的資料型態,有別於一般傳統的數字資料型態,像是 int、float 或是 double 等,NSNumber 是一個物件,而非單純的數值資料型態,這表示 NSNumber 可以被用來做更多的事情,同時也可以更有效率的在各個不同的數值資料型態之間做轉換。

4.23.2012

使用 Objective-C 製作 BMP 24bit 的圖片格式

嚴格說起來這一篇其實跟 iOS 比較沒關係,大部分的在 iOS 上都是採用 PNG 32 位元格式的影像來做應用,除非是專門在做影像處理相關的應用程式,不然很少會使用 BMP 24 位元格式的影像。BMP, bitmap 點陣圖,是 Windows 採用的點陣圖檔案儲存格式,也是做影像處理相關研究時很常被使用的一種影像格式,下面就來看看如何將圖片轉換成 BMP 24bit(不包含 alpha 透明度)的格式吧。

4.16.2012

使用 initWithCoder 初始化 Storyboard 上的元件

initWithCoder 是物件既有的一個初始化方法函式,正常來說,你不會在使用程式碼動態產生物件時去呼叫它產生新的物件,而是在使用 Storyboard 設計介面時,直接將 Storyboard 上的元件與類別中的 initWithCoder 方法做連結,使用類似靜態的方式,讓應用程式在一開始執行時就將介面上的元件直接定義成該類別,下面就來看看 initWithCoder 初始化方法函式的用法。

4.13.2012

取得畫面上所有的元件並判斷它們所屬的類別

在某些實作上我們需要取得畫面上所有元件的 Instance 並且判斷物件所屬的類別在分別給予不同的處理,例如更換畫面的佈景主題,就是一個相當典型的例子,因為不僅要取得畫面中未知數量與元件的 Instance,之後還要判斷該未知元件所屬的類別再分別給予不同的樣式,如果你也有類似的困擾,不妨可以參考以下的做法。

4.09.2012

影像與資料陣列的轉換(下)

 

在先前的文章影像與資料陣列的轉換(上)一文中,已經可以將 32 位元深度影像與自行定義的資料結構之間做轉換,但是面對其他格式的影像,例如 CMYK 或是 8 位元深度的的影像時該怎麼做呢?

4.06.2012

影像與資料陣列的轉換(上)

  

影像與資料陣列的轉換,是在對圖片做影像處理時會使用到的技巧,目的是將圖片轉換至人類可以理解的 RGBA 的資料結構陣列上,接著分別對每個像素點做影像處理,最後將處理的結果的轉換成影像並顯示,下面所要介紹的方法為通用方法,除了 iOS,您也可以使用在 MAC OS X Cocoa Application 上。

1.06.2012

Protocol 協定的使用方式

Protocol 協定,在是一種很常被使用的技巧,它可以將該類別的方法分享給其他的類別使用,替一個類別定義協定,並將要分享的方法寫在此協定的區塊中,之後在其他的類別中實作出此方法,這就是製作協定的基本流程,下面就讓我們來看看協定的使用方法。

11.28.2011

關於 Assert 的二三事

Assertion 斷言,它可以幫助程式做判斷的作用,當成程式執行到某個特定時間點,我們可以使用 Assert 斷言它現在是某種狀態,如果斷言的結果為真,程式將繼續執行,某則就發出中斷。在 Objective-C 中使用斷言有以下幾種方式。

11.14.2011

判斷物件是否已經存在於陣列中的方法

如果要判斷一個陣列中是否已經存在該物件,可以使用 containsObject: 方法,不管你是使用 NSArray 還是 NSMutableArray 都可以找到此方法。

10.07.2011

關於 Objective-C 的 in 指令

當你在 Objective-C 語言中,想要尋訪一個未知大小的 NSArray 陣列或是 NSMutableArray 陣列中的所有物件時,就可以使用 in 指令,in 指令可以在程式執行 for 迴圈時自動產生一個指向目前陣列中第一個物件的指標,並且在每次迴圈迭代中都會將指標移往下一個物件,直到整個陣列的最末端。

10.03.2011

使用 NSTimeZone 取得世界各地時間的方法

下列程式碼將示範,如何利用 NSTimeZone 取得世界上已知的時區名稱,並且透過這些名稱來獲得當地時間,如果在系統時間的取得上有任何疑問,可以參考取得 iOS 系統日期與星期的方法一文,其程式碼如下。

9.28.2011

關於兩個 NSString 字串之間的升冪與降冪排序

升冪與降冪可以做為字串在排序時的依據之一,以降冪的方式舉例來說,數字通常會比英文字母獲得比較高的排序數值,而符號的排序數值又會比數自來的更高些,因此以降冪的排序結果,最後就會呈現符號 → 數字  → 英文字母這樣的排序方式,而在 NSString 中也有類似的方法可以檢測所輸入的兩個字串彼此之間是否為升冪或是降冪的關係,方法如下。