172 похожих чатов

Подскажите - откуда у self = 3 ссылки? туплю может,

но больше 2ух не вижу

class Ref {}

// Class with references
class MyClass {
let ref1 = Ref()//+1
let ref2 = Ref()//+1

}

let b = MyClass() // +1 reference тип и +1 с каждым экземпляром
let anotherB = b //+1 (итого пока 2)

print("self:", CFGetRetainCount(b)) //self: 3 ( b, another b, а откуда еще +1? )

print("ref1:", CFGetRetainCount(b.ref1)) //ref1: 2 (2 ссылки на Ref)

print("ref2:", CFGetRetainCount(b.ref2)) //ref2: 2 (2 ссылки на Ref)

Для свойств ref1 и ref2 класса b оба значения равны 2. Каждое свойство ссылается на один и тот же объект типа Ref, и поэтому счетчик ссылок для этого объекта увеличивается на 1 для каждого свойства.

6 ответов

22 просмотра

Один вычитай из каждого ответа. На ref1 b ref2 по одной ссылке внутри единственного объекта MyClass() . У MyClass две ссылки (b и anotherB). CFGetRetainCount неявно увеличивает колличество ссылок на 1. Если вызвать CFGetRetainCount(MyCLass()) то вернется 1

Roman-Vakulenko Автор вопроса
Irakli Bogiti
Один вычитай из каждого ответа. На ref1 b ref2 по ...

Иракли, получается и здесь на 1 везде меньше, да? class Ref {} // // Struct with references struct MyStruct { let ref1 = Ref()//+1 ссылка на Ref {} let ref2 = Ref()//+1 ссылка на Ref {} } let oneA = MyStruct() // номинальный +1 значит, что нет дополнительных ссылок let anotherA = oneA // не добавляет - value type print("self:", CFGetRetainCount(oneA as CFTypeRef)) // self: 1 (0 по факту) print("ref1:", CFGetRetainCount(oneA.ref1)) // ref1: 3(2 по факту ) print("ref2:", CFGetRetainCount(oneA.ref2)) //ref1: 3(2по факту) Для свойств ref1 и ref2 структуры oneA оба значения = 3(2по факту?). Это происходит потому, что каждое свойство ссылается на один и тот же объект типа Ref, и поэтому счетчик ссылок для этого объекта увеличивается на 1 для каждого свойства и +1 для самой структуры oneA, потому 3. Структуры в Swift являются значимыми типами (value types) и не поддерживают подсчет ссылок. Поэтому, при выводе значения счетчика ссылок для self (oneA as CFTypeRef), мы получаем значение 1. Это означает, что для экземпляра структуры oneA нет дополнительных ссылок на него.

Roman Vakulenko
Иракли, получается и здесь на 1 везде меньше, да? ...

По-идее да. В твоем случае oneA скопировался в anoterA и, соответственно, скопировались ссылки на объекты

Не нужно пользоваться CFGetRetainCount для swift объектов

Roman-Vakulenko Автор вопроса
Руслан Лутфуллин
screenshot Не нужно пользоваться CFGetRetainCount для swift о...

Почему? Что имеешь ввиду? Из скина вижу, что можно даже количество weak / unowned считать. Объясни, плиз

Roman Vakulenko
Почему? Что имеешь ввиду? Из скина вижу, что можно...

Потому что swift и CF это два совершенно разных мира и этот метод не гарантирует верных результатов

Похожие вопросы

Обсуждают сегодня

а через ESC-код ?
Alexey Kulakov
29
30500 за редактор? )
Владимир
47
Чёт не понял, я ж правильной функцией воспользовался чтобы вывести отладочную информацию? но что-то она не ловится
notme
18
У меня есть функция где происходит это: write_bit(buffer, 1); write_bit(buffer, 0); write_bit(buffer, 1); write_bit(buffer, 1); write_bit(buffer, 1); w...
~
13
Недавно Google Project Zero нашёл багу в SQLite с помощью LLM, о чём достаточно было шумно в определённых интернетах, которые сопровождались рассказами, что скоро всех "ибешни...
Alex Sherbakov
5
program test; {$mode delphi} procedure proc(v: int32); overload; begin end; procedure proc(v: int64); overload; begin end; var x: uint64; begin proc(x); end. Уж не знаю...
notme
6
Как передать управляющий символ в открытую через CreateProcess консоль? Собсна, есть процедура: procedure TRedirectThread.WriteData(Data: OEMString); var Written: Cardinal;...
Serjone
6
вы делали что-то подобное и как? может есть либы готовые? увидел картинку нокода, где всё линиями соединено и стало интересно попробовать то же в ddl на lua сделать. решил с ч...
Victor
8
Ребят в СИ можно реализовать ООП?
Николай
33
Подскажите пожалуйста, как в CustomDrawCell(Sender: TcxCustomGridTableView; ACanvas: TcxCanvas; AViewInfo: TcxGridTableDataCellViewInfo; var ADone: Boolean); получить наз...
A Z
7
Карта сайта