Как распределяется память оператора? - PullRequest
0 голосов
/ 19 марта 2020

У меня есть исходная переменная.

let videoImage:CIImage = CIImage(cvPixelBuffer: pixelBuffer)

Я создаю еще один буфер Likeo.

let newImage:CIImage = self.videoImage

Я распечатываю их, чтобы посмотреть на их адрес памяти

print(videoImage)
print(newImage)

Вывод:

Optional(<CIImage: 0x280b91260 extent [0 0 1128 1504]>
  affine [1 0 0 -1 0 1504] extent=[0 0 1128 1504]
    colormatch "QuickTime 'nclc' Video (1,1,6)"_to_workingspace extent=[0 0 1128 1504]
      IOSurface 0x28073d990(675) seed:47 BGRA8 extent=[0 0 1128 1504]
)
<CIImage: 0x280b91260 extent [0 0 1128 1504]>

Кажется, у них одинаковый адрес памяти. 0x280b91260

Есть ли способ создать новую переменную с такой же точной информацией, но с другим адресом памяти?

Например,

Optional(<CIImage: 0x280b91260 extent [0 0 1128 1504]>
  affine [1 0 0 -1 0 1504] extent=[0 0 1128 1504]
    colormatch "QuickTime 'nclc' Video (1,1,6)"_to_workingspace extent=[0 0 1128 1504]
      IOSurface 0x28073d990(675) seed:47 BGRA8 extent=[0 0 1128 1504]
)
<CIImage: 0x361a92348 extent [0 0 1128 1504]>

Где первый и второй являются копией, но первая имеет адрес памяти 0x280b91260, а вторая 0x361a92348, например?

1 Ответ

1 голос
/ 19 марта 2020

CIImage - это класс . Класс является ссылочным типом. Присвоение экземпляра класса просто присваивает значение указателя . Другими словами, присваивание просто дает два указателя на один и тот же объект (ваш 0x280b91260). Это тип ссылки . См. Быстрая передача по значению или Передача по ссылке .

Если вам нужна копия, скажите self.videoImage.copy().

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...