What is the difference between [Class new] and [[Class alloc] init] in iOS?

34,745

Solution 1

Alloc: Class method of NSObject. Returns a new instance of the receiving class.

Init: Instance method of NSObject. Implemented by subclasses to initialize a new object (the receiver) immediately after memory for it has been allocated.

New: Class method of NSObject. Allocates a new instance of the receiving class, sends it an init message, and returns the initialized object.

Release: Instance method of NSObject delegate. Decrements the receiver’s reference count.

Autorelease: Instance method of NSObject delegate. Adds the receiver to the current autorelease pool.

Retain: Instance method of NSObject delegate. Increments the receiver’s reference count.

Copy: Instance method of NSObject delegate. Returns a new instance that’s a copy of the receiver.

So to conclude we can say that

alloc goes with init

new = alloc + init

Solution 2

The +new method is simply shorthand for +alloc and -init. The ownership semantics are identical. The only benefit to using +new is that it is more concise. If you need to provide arguments to the class's initialiser, you will have to use the +alloc and -initWith... methods instead.

Solution 3

Here: alloc, init, and new in Objective-C

Basically it's a question of modern versus traditional. The most direct advantage of init over new is that there are many custom init methods.

Share:
34,745
Prasad G
Author by

Prasad G

Updated on July 06, 2020

Comments

  • Prasad G
    Prasad G almost 4 years

    Possible Duplicate:
    alloc, init, and new in Objective-C

    I am a little confused about [Class new] and [[Class alloc] init]. I have defined an object content using [Class new] and [[Class alloc] init].

    (1). NSMutableArray *content = [NSMutableArray new];
    (2). NSMutableArray *content = [[NSMutableArray alloc] init];
    

    My question is about the differences between [Class new] and [[Class alloc] init]. For me, (1) and (2) are similar. If (1) and (2) are similar, then why do we use [[Class alloc] init] most of the time, compared to [Class new]? I think that there must be some difference.

    Kindly explain the differences, pros & cons of both?

  • Amr Lotfy
    Amr Lotfy over 8 years
    Great ! That was helpful !
  • TOMKA
    TOMKA almost 8 years
    Delegates don't really have anything to do with this. Do you mean NSObject protocol?