Using alloc, init in ARC enabled projects

alloc, automatic-ref-counting, init, ios, objective-c

Solution

If you use ARC, all the necessary `release` calls will be added for you when you compile. It will not leak.

The difference between

NSString *myString = [[NSString alloc]initWithFormat:@"Something"];

and

NSString *myString = [NSString stringWithFormat:@"Something"];

is that the first one will automatically released after the last reference to `myString` in that block, while the second one is an autoreleased instance that will only be released at the end of the run loop. It's not a big difference, but if you're using a lot of objects, try to avoid autoreleased ones to keep memory usage low.

Problem

Actually I am working on a project with `ARC` enabled. I know using `alloc` and `init` is taking `ownership` of the object. I know, If I create a string like this ``` NSString *myString = [[NSString alloc]initWithFormat:@"Something"]; ``` then I need to `release` the `myString` on myself. What If I am using ARC enabled? I cannot release on myself. So will it create a leak? Or should I don't create object like this? I can create a string like below code too. ``` NSString *myString = [NSString stringWithFormat:@"Something"]; ``` But which type I need to use exactly for ARC enabled project ? What will happen if I use first type?

Original source