но больше 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 для каждого свойства.
Один вычитай из каждого ответа. На ref1 b ref2 по одной ссылке внутри единственного объекта MyClass() . У MyClass две ссылки (b и anotherB). CFGetRetainCount неявно увеличивает колличество ссылок на 1. Если вызвать CFGetRetainCount(MyCLass()) то вернется 1
Иракли, получается и здесь на 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 нет дополнительных ссылок на него.
По-идее да. В твоем случае oneA скопировался в anoterA и, соответственно, скопировались ссылки на объекты
Почему? Что имеешь ввиду? Из скина вижу, что можно даже количество weak / unowned считать. Объясни, плиз
Потому что swift и CF это два совершенно разных мира и этот метод не гарантирует верных результатов
Обсуждают сегодня