what is difference between alloc and allocWithZone:?

前端 未结 6 1043
逝去的感伤
逝去的感伤 2020-12-12 15:07

From forum discussion , seem like that the big difference is performance factor, allocWithZone: will alloc memory from particular memory area, which reduce cost of swapping.

6条回答
  •  温柔的废话
    2020-12-12 15:35

    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:

    (1) 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:

    (2) -(id)copyWithZone:(NSZone *)zone;
    

    When copying an object the 'copy' message you send as above (1) when stated as 'copyWithZone sends a message to the 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.

提交回复
热议问题