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

6 просмотров

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

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

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

Если у меня есть такой класс: Object = {} function Object:new(a_name, a_transform, a_color, a_mesh, a_material, a_shader, a_textures) local private = {} private.n...
Cuarno Vile
4
я не магистр хаскеля, но разве не может лейзи тип конвертнуться в не-лейзи запросив вычисление содержимого прям при инициализации?
deadgnom32 λ madao
100
зачем же переименовывать ? чтобы кол-во участников возросло или вдруг IBM от этого снова на свифте начнет кодить ? Я не понимаю что страшного в том что свифт гавно, если это т...
Oleh Nerzh
10
здравствуйте. совершаю вот такую вещь: strcpy(line, (char)current_number); где current number — неподписанный шорт, line — массив чаров. ругань следующая: main.c:29:30: error...
Roberto's Ширгозиев
13
@MrMiscipitlick А можешь макрос написать, который будет вычислять смещение относительно переданных меток? Просто .label1-.label2, и вернуть значение.
КТ315
35
А еще в перле можно уже @arr1 + @arr2?
Sergei Zhmylove
53
Добрый день! Подскажите, пожалуйста: какими компетенциями нужно обладать, чтобы претендовать на работу эрланг (отдельная благодарность, если про элексир тоже подскажете) разр...
via ☸️ led
20
Всем привет. Ребят подскажите пожалуйста. Вопрос по дизасемблировани. Начну с начала. У меня есть скомпилированная программа на ГО (я разработчик) - в ней есть защита лицензии...
Zloy
11
Привет всем. появился вопрос. Разрабатываю сайт, в данный момент он запущен. Хостинг beget. Добавляю на сайт яндекс метрику с помощью полей client-settings (взято отсюда http...
Andrew
2
Можно попросить небольшое ревью кода? Тут немнога, я ничего интереснее не придумал, чем написать аналог tree в качестве практики с cmake. https://github.com/hrimov/tree-unix/...
Andrew Hrimov
11
Карта сайта