CoreBluetooth For Central (2)

BLE Status

CoreBluetooth提供的Framework物件內容都是以CB開頭命名,以下內容以CB代表CoreBluetooth,CB提供CBCentralManagerDelegate讓我們得知目前Bluetooth的狀態,從之後可以做一些互動機制提供使用者參考。

在使用CBCentralManagerDelegate之前我們要先宣告CBCentralManager,這物件用來管理在Central模式時,也提供Bluetooth狀態及一些功能,這個章節可以完成讀取Bluetooth的狀態,並利用NSLog印出來。

(閱讀全文…)

 CoreBluetooth For Central (1)

Bluetooth Low Energy(BLE)

Bluetooth Low Energy

Bluetooth的中文名稱為藍牙,Bluetooth Low Energy是從Bluetooth 4.0規範開始才有的,從字面上可以明確的知道這是個低耗能,具有較省電方式的藍牙。因為如此,特別適合用在長時間數據收集的用途,而加上Apple在硬體上全力支持Bluetooth 4.0功能,也為了Bluetooth Low Energy(有人稱Bluetooth LE或BLE,以下簡稱BLE)在iOS5之後增加了CoreBluetooth Framework增加易用性,現在許多的開發商也因為Apple紛紛投入生產相關周邊,漸漸的Bluetooth LE開始與NFC展開許許多多的議題。

Bluetooth 4.0中,Bluetooth LE只是4.0規範中其中一種,它也保留著向下相容的功能,只是Bluetooth SIG在規範中彈性的讓Bluetooth LE這個方式可以單獨存在,如此一來在低成本下,一些小型的裝置上面更容易實現透過Bluetooth LE與器機以無線的方式傳遞資料的目的。

對於Blueooth的演進想要更了解的可以到維基百科中的藍牙查看細節。

(閱讀全文…)

 Objective-C 避免物件循環引用

Objective-C 避免物件循環引用

ALT

使用物件或開發新物件時,都會引用宣告,宣告定義在.h檔案中,我們稱為標頭檔(header),Objective-C中並未規定標頭檔一定要哪個檔案中引入,視情況會在.h或程式中.m.mm,但避免重覆引用標頭檔,丹尼的做法是把標頭檔宣告在.m.mm中引用,這樣的做法會使Xcode在編譯時才會實現方法,寫程式期間比較不會因為Xcode的預先編譯讓Xcode會頓頓的感覺。

範例

下面程式範例讓你在標頭檔如果需要使用同樣物件時,加上前置宣告@class 物件名稱來告知編譯器:

/*
    filename:DYBox.h
*/

    @class DYLine

    @interface DYBox : NSObject
    @property (nonatomic, copy) NSString *labelName;
    @property (nonatomic, copy) NSString *labelAddress;
    @property (nonatomic, copy) DYLine *dyline;

/*
    filename:DYBox.m
*/
    #import "DYBox.h"
    #import "DYLine.h"

    @implementation DYBox
    :
     程式內容
    :
    @end

DYBox.h中加入@class DYLine前置宣告,之後在DYBox.h中宣告DYLine物件不需要再引入標頭檔,因為DYBox.m內容已經引入標頭檔DYLine.h而避免循環引用的問題。

結語

請記住!並非所有清況都是這樣做,如果您引用的標頭檔是有其他必存被編譯器所知道的宣告、協定之類,那還是可以在標頭檔中引用標頭檔的,只是能避免的話就可以盡量避免。

參考資料

更新日誌

日期 內容
2017/06/03 內容調整、標題修改
2014/01/09 首篇

關鍵字

  • 避免在標頭檔(.h)匯入不需要的標頭檔
  • @class
  • expected specifier-qualifier-list before
  • warning: receiver is a forward class and corresponding @interface may not exist
  • 循環引用 引用循環 类循环引用