Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Using alloc, init in ARC enabled projects

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?

like image 971
Dinesh Raja Avatar asked Nov 21 '12 14:11

Dinesh Raja


2 Answers

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.

like image 153
DrummerB Avatar answered Oct 06 '22 04:10

DrummerB


ARC takes care of the memory management, so no you don't need to worry about calling release on your myString variable, ARC will do that for you. Also as a suggestion I would recommend using convenience methods to create your object such as

[NSString stringWithFormat:@"Something"];

like image 33
Yuliani Noriega Avatar answered Oct 06 '22 04:10

Yuliani Noriega