2016-08-29 16 views
0

パフォーマンスを向上させるために、固定サイズのNSDataオブジェクトを作成したいと考えています。スウィフト遊び場で固定サイズのNSData()オブジェクトの宣言

var data = NSData(bytes: [], length: 18) 

私が見た結果

<a074740f 01000000 00bf740f 01000000 babc>

それは正しいですか?彼らはすべて0でなければならない?

また、固定サイズのNSDataオブジェクトをインスタンシエートすることは、それほど長くなると思いますか?

それが使われている各時間後、私は、このオブジェクト「空」に必要なことを言って価値がある、私はそれをaccoplishするための最良の方法は、ちょうど

self.data = NSData() 

私は何を使用する場合は、新しいオブジェクトを割り当てることであることを読んでここでは固定長のコードの最初のスニペットですか?私は固定サイズで空のNSDataのではなく、これらのランダムな値を取得します

EDIT:

を、私はそれらを同期させるために、BLEからデータを読み取る:

は、私が実際に達成しようとしていますかについての詳細を提供するために、私は、現在の値のフォーム変数を読み取り、その変数値を後でクリアするタイマーを使用します。

まず第一に、私はそれが全体の性能に磨きをかけるだろうと仮定しているため、私は、固定サイズのNSDataの変数を宣言したいと思います

第二に、私は

を使用した後の変数値をクリアしたいのですがこれは私がNSDataのように値を格納し、

class DataSynchronizer 
{ 
var timer:NSTimer 
var tag1:NSData = NSData() 
var tag2:NSData = NSData() 
var gpsData:CLLocation? 
var timeInterval:Double 


init(frequency:Double) 
{ 
    self.timer = NSTimer() 
    self.timeInterval = 1/frequency 

} 

func scheduledTimerWithTimeInterval(){ 
    // Scheduling timer to Call the function **Countdown** with the interval of 1 seconds 
    self.timer = NSTimer.scheduledTimerWithTimeInterval(self.timeInterval, target: self, selector: #selector(DataSynchronizer.syncValues), userInfo: nil, repeats: true) 
} 

func stopTimer() 
{ 
    self.timer.invalidate() 
} 


@objc func syncValues() 
{ 
    print(self.tag1) 
    self.tag1 = NSData() 
    print(self.tag2) 
    self.tag2 = NSData() 
    print("\n") 
} 
} 

TAG1とTAG2値はBLE

を扱う別のクラスから変更されている別のクラスに渡すデフォルトでは、私は彼らがコンソールに印刷を参照して文字列でそれを行う方法です
func peripheral(peripheral: CBPeripheral, didUpdateValueForCharacteristic characteristic: CBCharacteristic, error: NSError?) { 
    if self.updateStarted == false{ 
    self.updateStarted = true 
    } 

    let firstTagIdentifier = self.tagsIds[0] 

    if "\(peripheral.identifier)" == firstTagIdentifier 
    { 

     self.peripheralCounter = self.peripheralCounter + 1 

     let date = NSDate() 
     if characteristic.value?.length == 18 
     { 

      synchronizer.tag1 = characteristic.value! //synchronizer is a DataSynchronizer instance 
     } 
+0

NSData(bytes:[]、length:18)は未定義の動作で、空の配列から18バイトを読み込みます。データがどのように満たされ使用されているかについてより多くの情報を提供すれば、「良い実践」に関するより良い回答が可能です。 –

+0

私の編集をチェックしてください、これが助けてくれるといいですか? – DCDC

+0

BLEからの読書はあなたに(新)NSDataオブジェクトを与えませんか?事前割り当ては意味をなさないでしょう。 –

答えて

3
var data = NSData(bytes: [], length: 18) 

未定義の動作を引き起こす:それは空の配列からの18のバイトを読み出します。

let data = NSMutableData(capacity: 18)! 

は と

let data = NSMutableData() 
data.length = 18 

18はゼロバイトのデータオブジェクトを作成し、18のバイトを保持する能力を有する(空の)データオブジェクトを作成します。以前に割り当てられたデータオブジェクトが解放されることを意味し 、

synchronizer.tag1 = characteristic.value! 

synchronizer.tag1に格納された値が上書きさある:あなたは

data.length = 0 

しかしで 内容を空にすることができます。 固定サイズのデータ​​オブジェクトを前に割り当てたかどうかは関係ありません。また、 NSDataオブジェクトをcharacteristic.valueから取得しているため、パフォーマンスが向上しません。今

var tag1: NSData? 
var tag2: NSData? 

あなたはデータを割り当て、再びnilを割り当てることによって、それを取り除くことができます:

あなたはシンクロナイザクラスの「クリア」のデータは、その後、オプションの変数として タグを定義したい場合は

tag1 = nil 
tag2 = nil 
+0

あなたの答えに感謝します。結論は、私は固定サイズを宣言しようとすることを気にするべきではないということです。しかし、新しいNSData()オブジェクトにリソースを消費することによって値をクリアしていますか? – DCDC

+0

@DCDC:オブジェクトを割り当てるため、(おそらく無関係な)オーバーヘッドがあります。しかし、オプションは、値を持つ変数を定義する迅速な方法です。 –

+0

はい、それは本当ですが、構造体に渡して後で読みたい場合、私はアンラップしたり、たくさんのものを入れなければなりません。 – DCDC

関連する問題