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.
In practice, almost get no chance to use allocWithZone: , anyone can give simple example to illustrate which case to use allocWithZone: ?
Thanks,
This suggests to me that your ivars, and any objects your classes "create" themselves could make use of
+allocWithZone:
in this way, to make the instances they create in the same zone.In the Foundation Functions Reference, all of the
Zone
functions are now prefaced with the below warning that Zones will be ignored.Even if the Apple's Documentation indicates that
allocWithZone:
and
in reality I overridden it in an Objective-C class (in a full Objective-C project) and the method is called when I do
[[Mylass alloc] init]
even if the build is running on an iPhone 6s.But I think it's better to follow the documentation and override
alloc
method instead of this one because alloc can certainly do the same job.From Apple's documentation:
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:
The NSCopy protocol ensures you implement a method:
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:
This is the only place I am aware allocWithZone is actually used.
I use
allocWithZone
in singleton. As Forrest mentioned, the variables created allocated from the same region of memory. Thus other classes can use or access them from the same zone of memory. Save memory space when you run your app.