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 ответов

25 просмотров

Один вычитай из каждого ответа. На 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 это два совершенно разных мира и этот метод не гарантирует верных результатов

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

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

Господа, а что сейчас вообще с рынком труда на делфи происходит? Какова ситуация?
Rꙮman Yankꙮvsky
29
А вообще, что может смущать в самой Julia - бы сказал, что нет единого стандартного подхода по многим моментам, поэтому многое выглядит как "хаки" и произвол. Короче говоря, с...
Viktor G.
2
30500 за редактор? )
Владимир
47
а через ESC-код ?
Alexey Kulakov
29
Чёт не понял, я ж правильной функцией воспользовался чтобы вывести отладочную информацию? но что-то она не ловится
notme
18
У меня есть функция где происходит это: write_bit(buffer, 1); write_bit(buffer, 0); write_bit(buffer, 1); write_bit(buffer, 1); write_bit(buffer, 1); w...
~
14
Добрый день! Скажите пожалуйста, а какие программы вы бы рекомендовали написать для того, чтобы научиться управлять памятью? Можно написать динамический массив, можно связный ...
Филипп
7
Недавно Google Project Zero нашёл багу в SQLite с помощью LLM, о чём достаточно было шумно в определённых интернетах, которые сопровождались рассказами, что скоро всех "ибешни...
Alex Sherbakov
5
Ребят в СИ можно реализовать ООП?
Николай
33
https://github.com/erlang/otp/blob/OTP-27.1/lib/kernel/src/logger_h_common.erl#L174 https://github.com/erlang/otp/blob/OTP-27.1/lib/kernel/src/logger_olp.erl#L76 15 лет назад...
Maksim Lapshin
20
Карта сайта