Fork me on GitHub

what is difference between alloc and allocWithZone

A good example for using allocWithZone: is when you are implementing the NSCopy protocol, which allows you make your custom objects copyable (deep copy / copy by value) like:

 ClassName *newObject = [currentObject copy]; //results in newObject being a copy of currentObject not just a reference to it

The NSCopy protocol ensures you implement a method:

The NSCopy protocol ensures you implement a method:

When copying an object the 'copy' message you send as above (1) is converted to a 'copyWithZone:' message behind the scenes and calls your method (2). aka you don't have to do anything to get a zone yourself.

Now as you have a 'zone' sent to this message you can use it to ensure a copy is made from memory in the same region as the original.

This can be used like:

-(id)copyWithZone:(NSZone *)zone
{
   newCopy = [[[self class]allocWithZone:zone]init]; //gets the class of this object then allocates a new object close to this one and initialises it before returning
   return(newCopy);
}

This is the only place I am aware allocWithZone is actually used.

posted on 2012-05-13 23:08  pengyingh  阅读(451)  评论(0)    收藏  举报

导航