
Inline adoc files when they are included exactly once. Also fix language tags because this inlining gives us better information on what language the code is written in.
53 lines
1.3 KiB
Plaintext
53 lines
1.3 KiB
Plaintext
== Why is this an issue?
|
|
|
|
Classes should only hold ``++weak++`` references to delegate fields with ``++class++`` type. Otherwise, the owning class will have a ``++strong++`` reference to its delegate, and vice versa, and the OS won't be able to deallocate either of them..
|
|
|
|
|
|
Note that this only applies to non-computed delegate fields in classes, and not to fields in ``++struct++``s and ``++enum++``s.
|
|
|
|
|
|
=== Noncompliant code example
|
|
|
|
[source,swift]
|
|
----
|
|
class MyClass {
|
|
var delegate: ConventionDelegate? // Noncompliant
|
|
}
|
|
----
|
|
|
|
|
|
=== Compliant solution
|
|
|
|
[source,swift]
|
|
----
|
|
class MyClass {
|
|
weak var delegate: ConventionDelegate?
|
|
}
|
|
----
|
|
|
|
|
|
ifdef::env-github,rspecator-view[]
|
|
|
|
'''
|
|
== Implementation Specification
|
|
(visible only on this page)
|
|
|
|
=== Message
|
|
|
|
Mark this variable as "weak" to avoid reference cycles.
|
|
|
|
|
|
=== Highlighting
|
|
|
|
variable declaration
|
|
|
|
|
|
'''
|
|
== Comments And Links
|
|
(visible only on this page)
|
|
|
|
=== on 5 Sep 2017, 17:57:58 Elena Vilchik wrote:
|
|
Problem of reference cycles is an important one in Swift (see this https://developer.apple.com/library/content/documentation/Swift/Conceptual/Swift_Programming_Language/AutomaticReferenceCounting.html[doc]), but in order to track this pattern we need a semantic information, which we don't have.
|
|
|
|
endif::env-github,rspecator-view[]
|