ARC differs from tracing garbage collection in that there is no background process that deallocates the objects asynchronously at runtime.
[6] Garbage collection was declared deprecated in OS X Mountain Lion, in favor of ARC, and removed from the Objective-C runtime library in macOS Sierra.
The programmer typically had to ensure that all possible weak references to an object were set to nil manually when it was being deallocated.
Zeroing weak references are only available in Mac OS X Lion (10.7) or later and iOS 5 or later, because they require additional support from the Objective-C runtime.
There exists a third-party library called PLWeakCompatibility [1] that allows one to use zeroing weak references even on these older OS versions.
Xcode will inform the developer when more complex use cases arise, such as when a variable is declared inside an autorelease pool and used outside it or when two objects need to be toll-free bridged with special casts.
An Optional type must be handled by "unwrapping" it with a conditional statement, allowing safe usage of the value, if present.