Generic Instance Method 総称体インスタンスメソッド

initializeMemory(as:repeating:count:)

Initializes the memory referenced by this pointer with the given value, binds the memory to the value’s type, and returns a typed pointer to the initialized memory. このポインタによって参照されるメモリを与えられた値で初期化して、そのメモリを値の型に束縛し、そして初期化されたメモリへの型付ポインタを返します。

Declaration 宣言

@discardableResult func initializeMemory<T>(as type: T.Type, repeating repeatedValue: T, count: Int) -> UnsafeMutablePointer<T>

Parameters パラメータ

type

The type to bind this memory to. このメモリに束縛することになる型。

repeatedValue

The instance to copy into memory. メモリにコピーすることになるインスタンス。

count

The number of copies of value to copy into memory. count must not be negative. メモリにコピーすることになるvalueのコピー数。countは負数であってはいけません。

Return Value 戻り値

A typed pointer to the memory referenced by this raw pointer. この生のポインタによって参照されるメモリへの型付ポインタ。

Discussion 解説

The memory referenced by this pointer must be uninitialized or initialized to a trivial type, and must be properly aligned for accessing T. このポインタによって参照されるメモリは、未初期化状態にされるまたは自明型に初期化されなければなりません、そしてTにアクセスするために適切にアラインされなければなりません。

The following example allocates enough raw memory to hold four instances of Int8, and then uses the initializeMemory(as:repeating:count:) method to initialize the allocated memory. 以下の例は、生のメモリを必要なだけアロケートすることで、4つのInt8インスタンスを保持して、それからinitializeMemory(as:repeating:count:)メソッドを使ってアロケートされたメモリを初期化します。


let count = 4
let bytesPointer = UnsafeMutableRawPointer.allocate(
        byteCount: count * MemoryLayout<Int8>.stride,
        alignment: MemoryLayout<Int8>.alignment)
let int8Pointer = bytesPointer.initializeMemory(
        as: Int8.self, repeating: 0, count: count)


// After using 'int8Pointer':
int8Pointer.deallocate()

After calling this method on a raw pointer p, the region starting at self and continuing up to p + count * MemoryLayout<T>.stride is bound to type T and initialized. If T is a nontrivial type, you must eventually deinitialize or move from the values in this region to avoid leaks. このメソッドを生のポインタp上で呼び出した後、selfで始まってp + count * MemoryLayout<T>.strideまで続く領域は、型Tに束縛されて初期化されます。Tが非自明型ならば、あなたはゆくゆくはデイニシャライズするかまたはこの領域の値から移動してリークを防がなければなりません。