Objective C for OS X doesn't have garbage collection; it's been deprecated for a long time now and I believe is now completely removed.
Objective C for iOS never had garbage collection.
ARC is automatic reference counting; it inserts all of the retain and releases in your code because it understands the Cocoa API and all of the naming conventions regarding memory rules. This can lead to slower code in some cases as the needs to insert additional retain/release calls to ensure safety. ARC is not a garbage collector in the normal sense of the word; it's an automated reference counting system.
Garbage collectors do not remove objects in memory that still have a handle to them. You simply have a coding error, as others have mentioned.
Also, the property semantics (weak, strong, copy, etc...) are only metadata to tell the compiler how to generate the setter/getter methods for properties. If you are setting the raw field yourself, you need to handle things properly. It seems like this is where some of the issues in your ObjC code may be coming from.