In which situations do we need to write the __autoreleasing ownership qualifier under ARC?

You’re right. As the official documentation explains: __autoreleasing to denote arguments that are passed by reference (id *) and are autoreleased on return. All of this is very well explained in the ARC transition guide. In your NSError example, the declaration means __strong, implicitly: NSError * e = nil; Will be transformed to: NSError * … Read more

Do I set properties to nil in dealloc when using ARC?

Short answer: no, you do not have to nil out properties in dealloc under ARC. Long answer: You should never nil out properties in dealloc, even in manual memory management. In MRR, you should release your ivars. Nilling out properties means calling setters, which may invoke code that it shouldn’t touch in dealloc (e.g. if … Read more

Some questions about Automatic Reference Counting in iOS5 SDK

If I decide to upgrade to iOS 5, do I need to remove all [myObject retain] and [myObject release] statements from my code? Yes, but XCode 4.2 includes a new “Migrate to Objective-C ARC” tool (in the Edit->Refactor menu), which does that for you. Calling dealloc is a different story. As mentioned in the comments … Read more

Fix warning “Capturing [an object] strongly in this block is likely to lead to a retain cycle” in ARC-enabled code

Replying to myself: My understanding of the documentation says that using keyword block and setting the variable to nil after using it inside the block should be ok, but it still shows the warning. __block ASIHTTPRequest *request = [[ASIHTTPRequest alloc] initWithURL:… [request setCompletionBlock:^{ NSDictionary *jsonDictionary = [[CJSONDeserializer deserializer] deserialize:request.responseData error:nil]; request = nil; // …. … Read more

ARC and bridged cast

I agree that the description is confusing. Since I just grasped them, I’ll try to summarize: (__bridge_transfer <NSType>) op or alternatively CFBridgingRelease(op) is used to consume a retain-count of a CFTypeRef while transferring it over to ARC. This could also be represented by id someObj = (__bridge <NSType>) op; CFRelease(op); (__bridge_retained <CFType>) op or alternatively … Read more

How do I implement an Objective-C singleton that is compatible with ARC?

In exactly the same way that you (should) have been doing it already: + (instancetype)sharedInstance { static MyClass *sharedInstance = nil; static dispatch_once_t onceToken; dispatch_once(&onceToken, ^{ sharedInstance = [[MyClass alloc] init]; // Do any other initialisation stuff here }); return sharedInstance; }

Why is @autoreleasepool still needed with ARC?

ARC doesn’t get rid of retains, releases and autoreleases, it just adds in the required ones for you. So there are still calls to retain, there are still calls to release, there are still calls to autorelease and there are still auto release pools. One of the other changes they made with the new Clang … Read more

How does the new automatic reference counting mechanism work?

Every new developer who comes to Objective-C has to learn the rigid rules of when to retain, release, and autorelease objects. These rules even specify naming conventions that imply the retain count of objects returned from methods. Memory management in Objective-C becomes second nature once you take these rules to heart and apply them consistently, … Read more