Table Of Contents


GC class
Synonym of GC-enabled class .
GC-enabled class

An Objective-C class, the implementation code of which is compiled by iGC-patched compiler with -fobjc-gc or -fobjc-arc-gc or -fobjc-arc-gc_c. That is, under MRRGC or ARCGC or ARCGC_C.

An Objective-C class, containing GC instance variables, like gcptr<T>::i, or GC methods like [HNXGCTraverse], [HNXGCOnReclaim].

A C++ class, which is enabled by HNXGC_ENABLE() in declaration.

non-GC class
Synonym of GC-disabled class.
GC-disabled class
A C++ class or an Objective-C class, which is neither designed for GC, nor compiled under GC mode.
ARC ivars
if the code of an Ojective-C class was compiled under ARC, then the instance variables of the class are ARC ivars.
MRR stands for Apple’s “Manual Retain Release”. MRR code are Objective-C sources compiled without any of these flags: -fobjc-gc, -fobjc-arc or -fobjc-arc-gc.
ARC stands for Apple’s “Automatic Reference Counting”. ARC code are Objective-C sources compiled with -fobjc-arc but not -fobjc-arc-gc or -fobjc-gc.

MRRGC stands for iGC’s “Manual Retain Release with Garbage Collection”. MRRGC code are Objective-C sources compiled with -fobjc-gc flag but not -fobjc-arc or -fobjc-arc-gc.

The ivars and properties in MRRGC code are captured by iGC, so their target objects are held alive. Other variables, including in-stack varaibles, parameters, return value, and global variables, are not captured. You still need to send [retain] messages for holding their targets.


ARCGC stands for iGC’s “Automatic Reference Counting with Garbage Collection”. ARCGC code are Objective-C sources compiled with -fobjc-arc-gc flag.

Note, technically ARCGC_C belongs to ARCGC in programming, but in iGC documentation ARCGC is usually refered to “ARCGC without ARCGC_C”, i.e. not compatible with ARC.

ARCGC_C stands for iGC’s “Automatic Reference Counting with Garbage Collection and Compatible to ARC”. ARCGC_C code are Objective-C sources compiled with combination of flags: -fobjc-arc-gc and -fobjc-arc-gc-compatible, or a combination of -fobjc-arc and -fobjc-gc but not -fobjc-arc-gc
strong reference
Strong references not only hold objects alive, but also imply a strong reclamation ordering. That is, the object referenced by a strong reference is guaranteed to be live during the object’s destructor. i.e. it is safe to access the object in destructor.
effective reference
Effective references hold objects alive. It likes the concept of strong reference in ARC, but strong reference in iGC implies a strong reclamation ordering, while effective reference just prevent objects from reclamation. Strong reference is one type of effective references.
unretained reference
Synonym of weak reference in this document.
weak reference
Weak references do not hold objects alive. They include raw reference and auto-zeroing weak reference.
raw reference

Raw references do not hold objects alive. The system just ignores them and do not nullified them automatically.

They are:

auto-zeroing weak reference

Auto-zeroing weak references do not hold objects alive and they are nullified automatically by the system when their target objects are reclaimed.

They are:

managed object
Managed objects are objects created in GC heap via iGC/HnxGC calls. Their lifetime are under the automatic management of the system. Managed objects are instances of GC class or most non-GC class, except some types of non-GC classes that cannot be managed. see non-managed object.
non-managed object
Non-managed objects are objects that created in usual ways, such as using C/C++ new and malloc. For Objective-C objects, most of them are automatically created in GC heap and become managed object. Only a few classes and those have customized NSObject basic methods, such as retain/release/alloc methods. Objective-C Blocks are managed objects. Core Foundation objects are non-managed objects.
Synonym of NULL, nil, null and zero.
interior pointer
HnxGC/iGC smart pointers, or sometime refers to C/C++ pointers, pointing to the interior of managed objects, i.e. the value of an interior pointer is an address inside a managed object in heap.