Бажаєте завжди бути в курсі найсвіжіших новин за місяць зі світу Mobile?
Тоді підписуйтесь на нашу спільноту! 🔥
DOU | Mobile є каналом у Telegram, який присвячений усім аспектам мобільної розробки та продуктів від спільноти DOU. Тут ви знайдете технічні статті та блоги, войсчати, професійні обговорення, інформацію про події та вакансії у цій галузі. Якщо у вас є побажання, ідеї або скарги, завжди можете написати на @cnfccnfc. Приєднуйтесь до нашого каналу DOU | Mobile, щоб бути в курсі всіх новин у світі мобільної розробки та знайти корисну інформацію для себе!
29 Jan, 10:09
28 Jan, 16:42
28 Jan, 13:02
27 Jan, 17:05
25 Jan, 12:03
23 Jan, 15:05
22 Jan, 17:03
21 Jan, 13:01
21 Jan, 08:15
19 Jan, 10:15
18 Jan, 12:02
17 Jan, 13:02
16 Jan, 10:15
15 Jan, 11:15
14 Jan, 13:01
14 Jan, 10:31
13 Jan, 09:02
11 Jan, 07:15
10 Jan, 12:01
09 Jan, 15:01
09 Jan, 09:03
08 Jan, 10:02
07 Jan, 13:01
07 Jan, 09:15
06 Jan, 11:02
05 Jan, 14:01
04 Jan, 08:01
03 Jan, 12:06
02 Jan, 13:01
01 Jan, 15:30
31 Dec, 11:01
30 Dec, 13:02
29 Dec, 13:02
28 Dec, 13:02
28 Dec, 08:02
27 Dec, 16:02
27 Dec, 11:02
26 Dec, 12:15
25 Dec, 13:05
25 Dec, 07:03
24 Dec, 13:01
24 Dec, 07:45
23 Dec, 13:20
22 Dec, 15:02
20 Dec, 15:30
20 Dec, 10:30
19 Dec, 10:45
18 Dec, 10:15
17 Dec, 13:01
17 Dec, 07:48
16 Dec, 12:30
15 Dec, 14:03
class Person {
let name: String
init(name: String) { self.name = name }
}
var person1: Person? = Person(name: "Alice") // Лічильник посилань: 1
var person2: Person? = person1 // Лічильник посилань: 2
person1 = nil // Лічильник посилань: 1
person2 = nil // Лічильник посилань: 0, об'єкт звільняється
class Apartment {
weak var tenant: Person?
}
var alice: Person? = Person(name: "Alice")
var apartment = Apartment()
apartment.tenant = alice
alice = nil // Об'єкт звільняється, оскільки слабкі посилання не утримують об'єкт в пам'яті
class Customer {
let name: String
var card: CreditCard?
init(name: String) { self.name = name }
}
class CreditCard {
let number: Int
unowned let customer: Customer
init(number: Int, customer: Customer) {
self.number = number
self.customer = customer
}
}
var john: Customer? = Customer(name: "John")
john!.card = CreditCard(number: 1234, customer: john!)
john = nil // Об'єкти Customer та CreditCard звільняються одночасно
12 Nov, 13:01
11 Nov, 15:13
10 Nov, 09:02
09 Nov, 08:03
08 Nov, 12:02
08 Nov, 08:24
07 Nov, 10:03
07 Nov, 07:33
06 Nov, 08:24
05 Nov, 14:30
05 Nov, 13:01
04 Nov, 08:00
02 Nov, 13:02
02 Nov, 10:01
01 Nov, 13:11
01 Nov, 08:18
31 Oct, 16:18
31 Oct, 07:58
31 Oct, 07:01
27 Oct, 12:02
26 Oct, 07:03
25 Oct, 15:02
25 Oct, 11:00
24 Oct, 06:10
23 Oct, 12:05
23 Oct, 09:02
23 Oct, 05:30
22 Oct, 11:01
21 Oct, 15:02
21 Oct, 09:10
20 Oct, 10:35
18 Oct, 10:35
15 Oct, 12:21
14 Oct, 12:30
13 Oct, 11:10
12 Oct, 07:10
11 Oct, 07:24
10 Oct, 07:14
09 Oct, 11:10
09 Oct, 07:37
struct MyStruct {
func printMessage() {
print("Hello from MyStruct")
}
}
let instance = MyStruct()
instance.printMessage() // Виклик визначається на етапі компіляції
vtable
) визначає, який метод викликати.
class BaseClass {
func printMessage() {
print("Hello from BaseClass")
}
}
class SubClass: BaseClass {
override func printMessage() {
print("Hello from SubClass")
}
}
let instance: BaseClass = SubClass()
instance.printMessage() // Виклик визначається в runtime за допомогою vtable
protocol MyProtocol {
func printMessage()
}
struct MyStruct: MyProtocol {
func printMessage() {
print("Hello from MyStruct")
}
}
let instance: MyProtocol = MyStruct()
instance.printMessage() // Виклик визначається в runtime за допомогою witness table
import Foundation
class MyClass: NSObject {
@objc dynamic func printMessage() {
print("Hello from MyClass")
}
}
let instance = MyClass()
instance.printMessage() // Виклик визначається в runtime за допомогою Objective-C runtime
08 Oct, 12:02
08 Oct, 10:41
07 Oct, 12:54
06 Oct, 09:15
05 Oct, 12:10
05 Oct, 07:10
04 Oct, 09:16
03 Oct, 16:15
03 Oct, 07:09